设置对象

本节详细介绍了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代表Python set类型。
PyTypeObject PyFrozenSet_Type
这是PyTypeObject代表Python frozenset类型。

以下类型检查宏可用于指向任何Python对象的指针。同样,构造函数可以处理任何可迭代的Python对象.

int PySet_Check( PyObject  *p)
如果p是set对象或子类型的实例,则返回true.
int PyFrozenSet_Check( PyObject  *p)
如果p是frozenset对象或asubtype的实例,则返回true。
int  PyAnySet_Check(的PyObject  *p)
如果p是set对象,frozenset对象或子类型的实例.
int PyAnySet_CheckExact(的PyObject  *p)
如果p是set对象或frozenset对象但不是子类型的实例.
int PyFrozenSet_CheckExact(的PyObject  *p)
如果p是frozenset对象但不是asubtype的实例.
PyObject * PySet_New(的PyObject  *iterable)
Return value: New reference.

返回一个新的set包含iterable返回的对象。iterable可能是NULL来创建一个新的空集。在失败时返回新设置onsuccess或NULL。举起TypeError如果iterable实际上是可迭代的。构造函数也可用于复制集合(c=set(s)).

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

返回一个新的frozenset包含iterable返回的对象.iterable可能是NULL创建一个新的空冻结集。成功时返回最新值或失败时返回NULL。如果TypeError实际上是不可迭代的话iterable举起

以下函数和宏可用于set或frozenset的实例或其子类的实例.

Py_ssize_t PySet_Size( PyObject *anyset)

返回set或frozenset宾语。相当于len(anyset)。如果PyExc_SystemError不是anyset,或者是子类型的实例,则会引发set, frozenset.

Py_ssize_t PySet_GET_SIZE( PyObject  *anyset)
PySet_Size()的宏形式,没有错误检查.
int PySet_Contains( PyObject  *anyset,PyObject  *key)
返回1如果找到,0如果没有找到,则-1如果遇到错误。Unlikethe Python __contains__()方法,此函数不会自动将不可用的集转换为临时的冻结集。如果TypeError不可用,请举起key。如果PyExc_SystemError不是anyset就举起set, frozenset,或子类的一个实例.
int PySet_Add( PyObject  *set,PyObject  *key)
将key添加到set实例中。也适用于frozenset实例(如PyTuple_SetItem()它可用于填写全新frozensets的值,然后再将其暴露给其他代码)。在失败时返回0 onsuccess或-1。如果TypeError不可用,请举起key。举起MemoryError如果没有成长的空间。举起SystemError如果set不是set或者itssubtype.

以下功能适用于set或者它的子类型,但不适用于frozenset或其子类型的实例.

int PySet_Discard( PyObject  *set,PyObject  *key)
返回1如果找到并删除,0如果没有找到(没有采取任何行动),和-1如果遇到错误。不提出KeyError缺少钥匙。如果TypeError不可用,请举起key。与Python discard()方法不同,此函数不会自动转换不可用的集合intotemporary frozensets。举起PyExc_SystemError如果set不是set或其子类型的实例.
PyObject* PySet_Pop( PyObject *set)
Return value: New reference.

返回对set中任意对象的新引用,并从set中删除对象。失败时返回NULL。如果这些是空的,请举起KeyError。举起SystemError如果set不是set的实例或其子类型

//int PySet_Clear(PyObject  *set)
清空现有的所有元素.
int PySet_ClearFreeList()
清除免费清单。返回已释放物品的总数.

3.3版本中的新品.

评论被关闭。