Объекты множеств¶Set Objects
В этом разделе подробно описывается публичный 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, представляющий типsetPython.
-
PyTypeObject
PyFrozenSet_Type¶ Это экземпляр
PyTypeObject, представляющий типfrozensetPython.
Следующие макросы проверки типа работают с указателями на любой объект Python. Аналогично, функции-конструкторы работают с любым итерируемым объектом Python.
-
int
PySet_Check(PyObject *p)¶ Возвращает истину, если p является объектом
setили экземпляром подтипа.
-
int
PyFrozenSet_Check(PyObject *p)¶ Возвращает истину, если p является объектом
frozensetили экземпляром подтипа.
-
int
PyAnySet_Check(PyObject *p)¶ Возвращает истину, если p является объектом
set, объектомfrozensetили экземпляром подтипа.
-
int
PyAnySet_CheckExact(PyObject *p)¶ Возвращает истину, если p является объектом
setили объектомfrozenset, но не экземпляром подтипа.
-
int
PyFrozenSet_CheckExact(PyObject *p)¶ Возвращает истину, если p является объектом
frozenset, но не экземпляром подтипа.
-
PyObject*
PySet_New(PyObject *iterable)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
set, содержащий объекты, полученные из iterable. iterable может бытьNULLдля создания нового пустого множества. При успехе возвращает новое множество, при неудаче –NULL. ВозбуждаетTypeError, если iterable на самом деле не итерируем. Конструктор также удобен для копирования множества (c=set(s)).
-
PyObject*
PyFrozenSet_New(PyObject *iterable)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
frozenset, содержащий объекты, полученные из iterable. iterable может бытьNULLдля создания нового пустого frozenset. При успехе возвращает новое множество, при неудаче –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, если произошла ошибка. В отличие от метода__contains__()в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. ВозбуждаетTypeError, если ключ нехэшируем. ВозбуждаетPyExc_SystemError, если любой набор не является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, если ключ нехэшируем. В отличие от методаdiscard()в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. ВозбуждаетPyExc_SystemError, если множество не является экземпляромsetили его подтипа.
-
PyObject*
PySet_Pop(PyObject *set)¶ - Возвращаемое значение: новая ссылка.
Возвращает новую ссылку на произвольный объект в множестве и удаляет этот объект из множества. Возвращает
NULLпри неудаче. ВозбуждаетKeyError, если множество пусто. ВозбуждаетSystemError, если set не является экземпляромsetили его подтипа.
-
int
PySet_ClearFreeList()¶ Очищает список свободных блоков. Возвращает общее количество освобождённых элементов.
Новое в версии 3.3.