Объекты множества¶
В этом разделе подробно описывается открытое API для объектов set
и
frozenset
. К любой функциональности, не упомянутой ниже, лучше всего получить
доступ, используя любой абстрактный протокол объекта (включая 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
PyFrozenSet_Check
(PyObject *p)¶ Возвращает true, если p является объектом
frozenset
или сущностью подтипа.
-
int
PyAnySet_Check
(PyObject *p)¶ Возвращает true, если p является объектом
set
, объектомfrozenset
или сущностью подтипа.
-
int
PyAnySet_CheckExact
(PyObject *p)¶ Возвращает true, если p является объектом
set
или объектомfrozenset
, но не сущностью подтипа.
-
int
PyFrozenSet_CheckExact
(PyObject *p)¶ Возвращает true, если p является
frozenset
объектом, но не сущность подтипа.
-
PyObject*
PySet_New
(PyObject *iterable)¶ - Return value: New reference.
Возвращает новое
set
, содержащее объекты, возвращенный iterable. Возможно, iterable может бытьNULL
, создав новое пустое множество. Возвращает новое множество при успехе или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
при обнаружении ошибки. В отличие от метода Python__contains__()
, эта функция не преобразует невидимые множества автоматически во временные фрозенсеты. ПоднимаетсяTypeError
, если key является нехэшируемым. ПоднимаетсяPyExc_SystemError
, если anyset не являетсяset
,frozenset
или сущностью подтипа.
-
int
PySet_Add
(PyObject *set, PyObject *key)¶ Добавление key в
set
сущность. Также работает сfrozenset
сущности (как иPyTuple_SetItem()
можно использовать заполнив значения новых фрозенсетов, прежде чем они будут подвергнуты воздействию другого кода). Возвращает0
при успехе или-1
при сбое. ПоднимаетсяTypeError
, если key является нехэшируемым. ПоднимаетсяMemoryError
, если нет места для роста. СоздаетсяSystemError
, если set не является сущностьюset
или его подтипа.
Следующие функции доступны для сущности set
или его подтипов, но не
для сущности frozenset
или его подтипов.
-
int
PySet_Discard
(PyObject *set, PyObject *key)¶ Возвращает
1
если найдено и удалено,0
если не найдено (никаких действий не предпринято) и-1
если обнаружена ошибка. Не вызываетKeyError
при отсутствии ключей. ПоднимаетсяTypeError
, если key является нехэшируемым. В отличие от метода Pythondiscard()
, эта функция не преобразует невидимые множества автоматически во временные фрозенсеты. ПоднимаетсяPyExc_SystemError
, если set не является сущностьюset
или его подтипом.
-
PyObject*
PySet_Pop
(PyObject *set)¶ - Return value: New reference.
Возвращает новую ссылку на произвольный объект в set и удаляет объект из set. Возвращает
NULL
при отказе. ПоднимаетсяKeyError
, если множество пусто. ПоднимаетсяSystemError
, если set не является сущностьюset
или его подтипа.
-
int
PySet_ClearFreeList
()¶ Очистить свободный список. Возвращает общее количество освобожденных элементов.
Добавлено в версии 3.3.