Объекты множества¶
В этом разделе подробно описывается открытое 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.
