集合物件¶
本節詳細介紹了 set
和 frozenset
物件的公共 API。 以下未列出的任何功能最好使用抽象物件協議(包括 PyObject_CallMethod()
、 PyObject_RichCompareBool()
、 PyObject_Hash()
、 PyObject_Repr()
、 PyObject_IsTrue()
、 PyObject_Print()
和 PyObject_GetIter()
)或抽象數字協議(包括 PyNumber_And()
、 PyNumber_Subtract()
、 PyNumber_Or()
、 PyNumber_Xor()
、 PyNumber_InPlaceAnd()
、 PyNumber_InPlaceSubtract()
、 PyNumber_InPlaceOr()
和 PyNumber_InPlaceXor()
)來訪問。
-
type PySetObject¶
這個
PyObject
的子型別用於儲存set
和frozenset
物件的內部資料。它類似於PyDictObject
,對於小型集合,它的大小是固定的(非常類似於元組儲存),並且對於中大型集合,它將指向一個單獨的、大小可變的記憶體塊(非常類似於列表儲存)。此結構的任何欄位都不應被視為公共欄位,並且所有欄位都可能會發生更改。所有訪問都應透過記錄的 API 完成,而不是透過操作結構中的值完成。
-
PyTypeObject PySet_Type¶
- 屬於 穩定 ABI 的一部分。
這是
PyTypeObject
的一個例項,表示 Pythonset
型別。
-
PyTypeObject PyFrozenSet_Type¶
- 屬於 穩定 ABI 的一部分。
這是
PyTypeObject
的一個例項,表示 Pythonfrozenset
型別。
以下型別檢查宏適用於指向任何 Python 物件的指標。同樣,建構函式適用於任何可迭代的 Python 物件。
-
PyObject *PySet_New(PyObject *iterable)¶
- 返回值:新引用。屬於 穩定 ABI 的一部分。
返回一個新的
set
,其中包含 iterable 返回的物件。 iterable 可以為NULL
來建立一個新的空集合。成功時返回新集合,失敗時返回NULL
。如果 iterable 實際上不可迭代,則引發TypeError
。建構函式也適用於複製集合(c=set(s)
)。
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- 返回值:新引用。屬於 穩定 ABI 的一部分。
返回一個由iterable返回的物件組成的新
frozenset
。 iterable 可以是NULL
以建立一個新的空 frozenset。 成功時返回新的集合,失敗時返回NULL
。 如果 iterable 實際上不是可迭代的,則引發TypeError
。
以下函式和宏可用於 set
或 frozenset
的例項或其子型別的例項。
-
Py_ssize_t PySet_Size(PyObject *anyset)¶
- 屬於 穩定 ABI 的一部分。
返回
set
或frozenset
物件的長度。等同於len(anyset)
。如果 anyset 不是set
,frozenset
或其子型別的例項,則引發SystemError
。
-
Py_ssize_t PySet_GET_SIZE(PyObject *anyset)¶
PySet_Size()
的宏形式,不進行錯誤檢查。
-
int PySet_Contains(PyObject *anyset, PyObject *key)¶
- 屬於 穩定 ABI 的一部分。
如果找到,則返回
1
;如果未找到,則返回0
;如果遇到錯誤,則返回-1
。與 Python 的__contains__()
方法不同,此函式不會自動將不可雜湊的集合轉換為臨時的 frozenset。如果 key 不可雜湊,則引發TypeError
。如果 anyset 不是set
,frozenset
或其子型別的例項,則引發SystemError
。
-
int PySet_Add(PyObject *set, PyObject *key)¶
- 屬於 穩定 ABI 的一部分。
將 key 新增到
set
例項。也適用於frozenset
例項(如PyTuple_SetItem()
,可用於在將全新的 frozenset 公開給其他程式碼之前填充其值)。成功時返回0
,失敗時返回-1
。如果 key 不可雜湊,則引發TypeError
。如果沒有空間增長,則引發MemoryError
。如果 set 不是set
或其子型別的例項,則引發SystemError
。
以下函式可用於 set
或其子型別的例項,但不能用於 frozenset
或其子型別的例項。
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- 屬於 穩定 ABI 的一部分。
如果找到並刪除,則返回
1
;如果未找到(未執行任何操作),則返回0
;如果遇到錯誤,則返回-1
。不會為缺少的鍵引發KeyError
。如果 key 不可雜湊,則引發TypeError
。與 Python 的discard()
方法不同,此函式不會自動將不可雜湊的集合轉換為臨時的 frozenset。如果 set 不是set
或其子型別的例項,則引發SystemError
。
-
PyObject *PySet_Pop(PyObject *set)¶
- 返回值:新引用。屬於 穩定 ABI 的一部分。
返回對 set 中任意物件的新引用,並從 set 中刪除該物件。失敗時返回
NULL
。如果集合為空,則引發KeyError
。如果 set 不是set
或其子型別的例項,則引發SystemError
。
-
int PySet_Clear(PyObject *set)¶
- 屬於 穩定 ABI 的一部分。
清空現有集合中的所有元素。成功時返回
0
。如果set不是set
或其子型別的例項,則返回-1
並引發SystemError
。