设置对象

本节详细介绍的公共API setfrozenset 物体。使用抽象对象协议(包括 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

这种subtype PyObject 用于保存两者的内部数据 setfrozenset 物体。它就像一个 PyDictObject 因为它是一个固定大小的小集合(很像元组存储),它将指向一个单独的、可变大小的内存块,用于中型和大型集合(很像列表存储)。此结构的任何字段都不应被视为公共字段,并可能发生更改。所有访问都应该通过文档化的API完成,而不是通过操作结构中的值。

PyTypeObject PySet_Type

这是一个 PyTypeObject 代表 Python set 类型。

PyTypeObject PyFrozenSet_Type

这是一个 PyTypeObject 代表 Python frozenset 类型。

以下类型检查宏用于指向任何Python对象的指针。同样,构造器函数与任何可ITerable python对象一起工作。

int PySet_Check(PyObject *p)

如果满足以下条件,则返回TRUE p 是一种 set 对象或子类型的实例。此功能总是成功的。

int PyFrozenSet_Check(PyObject *p)

如果满足以下条件,则返回TRUE p 是一种 frozenset 对象或子类型的实例。此功能总是成功的。

int PyAnySet_Check(PyObject *p)

如果满足以下条件,则返回TRUE p 是一种 set 对象,则一个 frozenset 对象,或子类型的实例。此功能总是成功的。

int PyAnySet_CheckExact(PyObject *p)

如果满足以下条件,则返回TRUE p 是一种 set 对象或一个 frozenset 对象,而不是子类型的实例。此功能总是成功的。

int PyFrozenSet_CheckExact(PyObject *p)

如果满足以下条件,则返回TRUE p 是一种 frozenset 对象,而不是子类型的实例。此功能总是成功的。

PyObject *PySet_New(PyObject *iterable)
Return value: New reference.

返回一个新的 set 包含由返回的对象 可迭代的 . 这个 可迭代的 可能是 NULL 创建新的空集。成功时返回新集合,或 NULL 失败论。提高 TypeError 如果 可迭代的 实际上不是不可测的。构造函数对于复制集合也很有用 (c=set(s)

PyObject *PyFrozenSet_New(PyObject *iterable)
Return value: New reference.

返回一个新的 frozenset 包含由返回的对象 可迭代的 . 这个 可迭代的 可能是 NULL 创建新的空冻结集。成功时返回新集合,或 NULL 失败论。提高 TypeError 如果 可迭代的 实际上不是不可测的。

以下函数和宏可用于 setfrozenset 或其子类型的实例。

Py_ssize_t PySet_Size(PyObject *anyset)

返回a的长度 setfrozenset 对象。相当于 len(anyset) .提高 PyExc_SystemError 如果 任何一组 不是一个 setfrozenset 或子类型的实例。

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

宏观形式 PySet_Size() 没有错误检查。

int PySet_Contains(PyObject *anyset, PyObject *key)

返回 1 如果找到了, 0 如果找不到,以及 -1 如果遇到错误。与 Python 不同 __contains__() 方法,此函数不会自动将不可显示集转换为临时冻结集。举起一个 TypeError 如果 key 是不可拆卸的。提高 PyExc_SystemError 如果 任何一组 不是一个 setfrozenset 或子类型的实例。

int PySet_Add(PyObject *set, PyObject *key)

添加 key 到A set 实例。也与 frozenset 实例(类) PyTuple_SetItem() 它可以用来填充全新冻结集的值,然后再将其暴露于其他代码中)。返回 0 关于成功还是 -1 失败论。举起一个 TypeError 如果 key 是不可拆卸的。举起一个 MemoryError 如果没有生长的空间。提高 SystemError 如果 set 不是的实例 set 或其subtype。

以下函数可用于 set 或其子类型,但不适用于 frozenset 或其子类型。

int PySet_Discard(PyObject *set, PyObject *key)

返回 1 如果找到并移除, 0 如果未找到(未采取任何措施),以及 -1 如果遇到错误。不提高 KeyError 找不到钥匙。举起一个 TypeError 如果 key 不可清洗。与 Python 不同 discard() 方法,此函数不会自动将不可显示集转换为临时冻结集。提高 PyExc_SystemError 如果 set 不是的实例 set 或其subtype。

PyObject *PySet_Pop(PyObject *set)
Return value: New reference.

返回对中任意对象的新引用 set ,并从 set . 返回 NULL 失败论。提高 KeyError 如果集合为空。举起一个 SystemError 如果 set 不是的实例 set 或其亚型。

int PySet_Clear(PyObject *set)

清空所有元素的现有集合。