Set Objects¶
本节详细说明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()
)。
-
PySetObject
¶ PyObject
的此子类型用于保存set
和frozenset
对象的内部数据。它像一个PyDictObject
,它是一个固定大小的小集合(很像元组存储),并指向一个单独的,可变大小的内存块为中型和大型集合(很像列表存储)。此结构的所有字段都不应被视为公开,并且可能会更改。所有访问都应通过记录的API完成,而不是通过操作结构中的值。
- PyTypeObject
PySet_Type
¶ 这是
PyTypeObject
的实例,表示Pythonset
类型。
- PyTypeObject
PyFrozenSet_Type
¶ 这是表示Python
frozenset
类型的PyTypeObject
的实例。
以下类型检查宏可用于指向任何Python对象的指针。同样,构造函数使用任何可迭代的Python对象。
- PyObject*
PySet_New
(PyObject *iterable)¶ - 返回值:新引用。
返回包含可迭代返回的对象的新
set
。可迭代可以是NULL以创建新的空集。在失败时返回新的成功或NULL。引发TypeError
if iterable实际上不可迭代。构造函数还可用于复制集合(c=set(s)
)。
- PyObject*
PyFrozenSet_New
(PyObject *iterable)¶ - 返回值:新引用。
返回包含可迭代返回的对象的新
frozenset
。可迭代可以是NULL来创建一个新的空的frozenset。在失败时返回新的成功或NULL。引发TypeError
if iterable实际上不可迭代。
以下函数和宏可用于set
或frozenset
的实例或其子类型的实例。
- Py_ssize_t
PySet_Size
(PyObject *anyset)¶ 返回
set
或frozenset
对象的长度。等效于len(anyset)
。如果anyset不是set
,frozenset
或子类型的实例,则引发PyExc_SystemError
。
- Py_ssize_t
PySet_GET_SIZE
(PyObject *anyset)¶ PySet_Size()
的宏形式,无错误检查。
- int
PySet_Contains
(PyObject *anyset, PyObject *key)¶ 返回1如果找到,0如果没有找到,和-1如果遇到错误。与Python
__contains__()
方法不同,此函数不会将不可隐藏集自动转换为临时冻结集。如果键不可消除,则引发TypeError
。引发PyExc_SystemError
if anyset不是set
,frozenset
或子类型的实例。
- int
PySet_Add
(PyObject *set, PyObject *key)¶ 将键添加到
set
实例。也可以使用frozenset
实例(如PyTuple_SetItem()
,它可以用来填充新的frozensets的值,然后暴露给其他代码)。成功返回0,失败返回-1。如果键不可消除,则引发TypeError
。如果没有增长空间,则引发MemoryError
。如果设置不是set
或其子类型的实例,则引发SystemError
以下函数可用于set
或其子类型的实例,但不适用于frozenset
或其子类型的实例。
- int
PySet_Discard
(PyObject *set, PyObject *key)¶ 返回1如果找到和删除,0如果没有找到(没有采取行动),和-1如果遇到错误。对于缺少的键,不引发
KeyError
。如果键不可消除,则引发TypeError
。与Pythondiscard()
方法不同,此函数不会将不可隐藏集自动转换为临时冻结集。引发PyExc_SystemError
if set不是set
的实例或其子类型。
- PyObject*
PySet_Pop
(PyObject *set)¶ - 返回值:新引用。
返回对set中任意对象的新引用,并从set中删除对象。失败时返回NULL。引发
KeyError
如果集合为空。如果设置不是set
或其子类型的实例,则引发SystemError
- int
PySet_ClearFreeList
()¶ 清除空闲列表。返回已释放项目的总数。
版本3.3中的新功能。