集合物件

本節詳細介紹了 setfrozenset 物件的公共 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 的子型別用於儲存 setfrozenset 物件的內部資料。它類似於 PyDictObject,對於小型集合,它的大小是固定的(非常類似於元組儲存),並且對於中大型集合,它將指向一個單獨的、大小可變的記憶體塊(非常類似於列表儲存)。此結構的任何欄位都不應被視為公共欄位,並且所有欄位都可能會發生更改。所有訪問都應透過記錄的 API 完成,而不是透過操作結構中的值完成。

PyTypeObject PySet_Type
屬於 穩定 ABI 的一部分。

這是 PyTypeObject 的一個例項,表示 Python set 型別。

PyTypeObject PyFrozenSet_Type
屬於 穩定 ABI 的一部分。

這是 PyTypeObject 的一個例項,表示 Python frozenset 型別。

以下型別檢查宏適用於指向任何 Python 物件的指標。同樣,建構函式適用於任何可迭代的 Python 物件。

int PySet_Check(PyObject *p)

如果 pset 物件或子型別的例項,則返回 true。此函式始終成功。

int PyFrozenSet_Check(PyObject *p)

如果 pfrozenset 物件或子型別的例項,則返回 true。此函式始終成功。

int PyAnySet_Check(PyObject *p)

如果 pset 物件、frozenset 物件或子型別的例項,則返回 true。此函式始終成功。

int PySet_CheckExact(PyObject *p)

如果 pset 物件但不是子型別的例項,則返回 true。此函式始終成功。

在 3.10 版本中新增。

int PyAnySet_CheckExact(PyObject *p)

如果 pset 物件或 frozenset 物件但不是子型別的例項,則返回 true。此函式始終成功。

int PyFrozenSet_CheckExact(PyObject *p)

如果 pfrozenset 物件但不是子型別的例項,則返回 true。此函式始終成功。

PyObject *PySet_New(PyObject *iterable)
返回值:新引用。屬於 穩定 ABI 的一部分。

返回一個新的 set,其中包含 iterable 返回的物件。 iterable 可以為 NULL 來建立一個新的空集合。成功時返回新集合,失敗時返回 NULL。如果 iterable 實際上不可迭代,則引發 TypeError。建構函式也適用於複製集合(c=set(s))。

PyObject *PyFrozenSet_New(PyObject *iterable)
返回值:新引用。屬於 穩定 ABI 的一部分。

返回一個由iterable返回的物件組成的新 frozensetiterable 可以是 NULL 以建立一個新的空 frozenset。 成功時返回新的集合,失敗時返回 NULL。 如果 iterable 實際上不是可迭代的,則引發 TypeError

以下函式和宏可用於 setfrozenset 的例項或其子型別的例項。

Py_ssize_t PySet_Size(PyObject *anyset)
屬於 穩定 ABI 的一部分。

返回 setfrozenset 物件的長度。等同於 len(anyset)。如果 anyset 不是 setfrozenset 或其子型別的例項,則引發 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 不是 setfrozenset 或其子型別的例項,則引發 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