集合对象¶
This section details the public API for set
and frozenset
objects. Any functionality not listed below is best accessed using either
the abstract object protocol (including PyObject_CallMethod()
,
PyObject_RichCompareBool()
, PyObject_Hash()
,
PyObject_Repr()
, PyObject_IsTrue()
, PyObject_Print()
, and
PyObject_GetIter()
) or the abstract number protocol (including
PyNumber_And()
, PyNumber_Subtract()
, PyNumber_Or()
,
PyNumber_Xor()
, PyNumber_InPlaceAnd()
,
PyNumber_InPlaceSubtract()
, PyNumber_InPlaceOr()
, and
PyNumber_InPlaceXor()
).
-
type PySetObject¶
This subtype of
PyObject
is used to hold the internal data for bothset
andfrozenset
objects. It is like aPyDictObject
in that it is a fixed size for small sets (much like tuple storage) and will point to a separate, variable sized block of memory for medium and large sized sets (much like list storage). None of the fields of this structure should be considered public and all are subject to change. All access should be done through the documented API rather than by manipulating the values in the structure.
-
PyTypeObject PySet_Type¶
- Part of the Stable ABI.
这是一个
PyTypeObject
实例,表示 Pythonset
类型。
-
PyTypeObject PyFrozenSet_Type¶
- Part of the Stable ABI.
这是一个
PyTypeObject
实例,表示 Pythonfrozenset
类型。
下列类型检查宏适用于指向任意 Python 对象的指针。 类似地,这些构造函数也适用于任意可迭代的 Python 对象。
-
PyObject *PySet_New(PyObject *iterable)¶
- Return value: New reference. Part of the Stable ABI.
返回一个新的
set
,其中包含 iterable 所返回的对象。 iterable 可以为NULL
表示创建一个新的空集合。 成功时返回新的集合,失败时返回NULL
。 如果 iterable 实际上不是可迭代对象则引发TypeError
。 该构造器也适用于拷贝集合 (c=set(s)
)。
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- Return value: New reference. Part of the Stable ABI.
返回一个新的
frozenset
,其中包含 iterable 所返回的对象。 iterable 可以为NULL
表示创建一个新的空冻结集合。 成功时返回新的冻结集合,失败时返回NULL
。 如果 iterable 实际上不是可迭代对象则引发TypeError
。
下列函数和宏适用于 set
或 frozenset
的实例或是其子类型的实例。
-
Py_ssize_t PySet_Size(PyObject *anyset)¶
- Part of the Stable ABI.
返回
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)¶
- Part of the Stable ABI.
如果找到返回
1
,如果未找到返回0
,如果遇到错误则返回-1
。 不同于 Python__contains__()
方法,此函数不会自动将不可哈希的集合转换为临时的冻结集合。 如果 key 为不可哈希对象则会引发TypeError
。 如果 anyset 不是set
,frozenset
或其子类型的实例则会引发PyExc_SystemError
。
-
int PySet_Add(PyObject *set, PyObject *key)¶
- Part of the Stable ABI.
Add key to a
set
instance. Also works withfrozenset
instances (likePyTuple_SetItem()
it can be used to fill in the values of brand new frozensets before they are exposed to other code). Return0
on success or-1
on failure. Raise aTypeError
if the key is unhashable. Raise aMemoryError
if there is no room to grow. Raise aSystemError
if set is not an instance ofset
or its subtype.
下列函数适用于 set
或其子类型的实例,但不可用于 frozenset
或其子类型的实例。
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- Part of the Stable ABI.
如果找到并移除返回
1
,如果未找到(无操作)返回0
,如果遇到错误则返回-1
。 对于不存在的键不会引发KeyError
。 如果 key 为不可哈希对象则会引发TypeError
。 不同于 Pythondiscard()
方法,此函数不会自动将不可哈希的集合转换为临时的冻结集合。 如果 set 不是set
或其子类型的实例则会引发PyExc_SystemError
。
-
PyObject *PySet_Pop(PyObject *set)¶
- Return value: New reference. Part of the Stable ABI.
返回 set 中任意对象的新引用,并从 set 中移除该对象。 失败时返回
NULL
。 如果集合为空则会引发KeyError
。 如果 set 不是set
或其子类型的实例则会引发SystemError
。
-
int PySet_Clear(PyObject *set)¶
- Part of the Stable ABI.
清空现有字典的所有键值对。