On this page
Set Objects
2.5 版的新Function。
本节详细介绍了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())访问以下未列出的任何Function,PyNumber_InPlaceOr()和PyNumber_InPlaceXor())。
PySetObject
- PyObject的此子类型用于保存set和frozenset对象的内部数据。就像PyDictObject一样,它对于小集合(类似于 Tuples 存储)是固定大小的,并且将指向用于中型和大型集合(与列表存储类似)的单独的可变大小的内存块。此结构的任何字段均不应视为公开字段,并且可能会发生变化。所有访问都应pass记录在案的 API 来完成,而不是pass操纵结构中的值来完成。
PyTypeObject
PySet_Type
- 这是PyTypeObject的实例,表示 Python set类型。
PyTypeObject
PyFrozenSet_Type
- 这是PyTypeObject的实例,表示 Python frozenset类型。
以下类型检查宏可用于指向任何 Python 对象的指针。同样,构造函数可以与任何可迭代的 Python 对象一起使用。
2.6 版的新Function。
2.6 版的新Function。
int
PyAnySet_Check
(PyObject ** p *)int
PyAnySet_CheckExact
(PyObject ** p *)int
PyFrozenSet_CheckExact
(PyObject ** p *)- 如果* p *是frozenset对象,但不是子类型的实例,则返回 true。
PyObject *
PySet_New
(PyObject *可迭代)- 返回值:新参考.
返回一个新的set,其中包含* iterable *返回的对象。 * iterable 可以为 NULL 以创建一个新的空集。如果成功,则返回新集;如果失败,则返回 NULL 。如果 iterable *实际上不是可迭代的,则提高TypeError。构造函数对于复制集合(c=set(s)
)也很有用。
返回一个新的frozenset,其中包含* iterable *返回的对象。 * iterable 可以为 NULL ,以创建一个新的空冻结集。如果成功,则返回新集;如果失败,则返回 NULL 。如果 iterable *实际上不是可迭代的,则提高TypeError。
在 2.6 版中进行了更改:现在保证返回一个全新的frozenset。以前,零长度的冻结集是一个单例。这妨碍了使用PySet_Add()
构建新的冻结集。
以下函数和宏可用于set或frozenset的实例或其子类型的实例。
- Py_ssize_t
PySet_Size
(PyObject ** anyset *)
在版本 2.5 中更改:此函数返回int
。这可能需要更改您的代码以正确支持 64 位系统。
Py_ssize_t
PySet_GET_SIZE
(PyObject ** anyset *)- PySet_Size()宏形式,无错误检查。
int
PySet_Contains
(PyObject *anyset ,PyObject key *)- 如果找到则返回
1
,如果找不到则返回0
,如果遇到错误则返回-1
。与 Python contains()方法不同,此函数不会自动将不可哈希集转换为临时冻结集。如果* key 无法散列,请举起TypeError。如果 anyset *不是set,frozenset或子类型的实例,则提高PyExc_SystemError
。
- 如果找到则返回
int
PySet_Add
(PyObject *set ,PyObject key *)- 将* key 添加到set实例。不适用于frozenset个实例。如果成功则返回
0
,如果失败则返回-1
。如果 key 无法散列,请加TypeError。如果没有增长空间,请提高MemoryError。如果 set *不是set或其子类型的实例,则引发SystemError。
- 将* key 添加到set实例。不适用于frozenset个实例。如果成功则返回
在 2.6 版中进行了更改:现在可用于frozenset或其子类型的实例。像PyTuple_SetItem()一样,它可以用于在新的冻结集暴露于其他代码之前填充它们的值。
以下Function适用于set或其子类型的实例,但不适用于frozenset或其子类型的实例。
返回对* set 中任意对象的新引用,并从 set 中删除该对象。失败时返回 NULL 。如果集合为空,则提高KeyError。如果 set *不是set或其子类型的实例,则引发SystemError。
- int
PySet_Clear
(PyObject ** set *)- 清空现有的所有元素集。