设置对象 – 具体对象层(Python教程)(参考资料)
设置对象
本节详细介绍了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
PyFrozenSet_Type
- 这是
PyTypeObject
代表Pythonfrozenset
类型。
以下类型检查宏可用于指向任何Python对象的指针。同样,构造函数可以处理任何可迭代的Python对象.
- 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。与Pythondiscard()
方法不同,此函数不会自动转换不可用的集合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版本中的新品.
评论被关闭。