集合对象¶
本节详细介绍了 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的一个实例,它代表 Python 的frozenset类型。
以下类型检查宏适用于指向任何 Python 对象的指针。同样,构造函数适用于任何可迭代的 Python 对象。
-
PyObject *PySet_New(PyObject *iterable)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
返回一个新的
set,其中包含由 iterable 返回的对象。iterable 可以是NULL,以创建一个新的空集。如果成功,则返回新的集合,如果失败,则返回NULL。如果 iterable 实际上不可迭代,则会引发TypeError。构造函数也用于复制集合 (c=set(s))。
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
返回一个新的
frozenset,其中包含由 iterable 返回的对象。iterable 可以是NULL,以创建一个新的空冻结集。如果成功,则返回新的集合,如果失败,则返回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__()方法不同,此函数不会自动将不可散列的集合转换为临时的冻结集合。如果 key 不可散列,则引发TypeError。如果 anyset 不是set、frozenset或子类型的实例,则引发SystemError。
-
int PySet_Add(PyObject *set, PyObject *key)¶
- 是 稳定 ABI 的一部分。
将 key 添加到
set实例中。也适用于frozenset实例(类似于PyTuple_SetItem(),它可以用于在将全新的冻结集合暴露给其他代码之前填充其值)。成功返回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()方法不同,此函数不会自动将不可散列的集合转换为临时的冻结集。如果 *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。