Объекты множеств¶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, содержащий объекты, возвращённые итерируемым объектом. Итерируемый объект может быть NULL для создания нового пустого множества. Возвращает новое множество в случае успеха или NULL при неудаче. Вызывает исключениеTypeError, если итерируемый объект не является итерируемым на самом деле. Конструктор также полезен для копирования множества (c=set(s)).
-
PyObject*
PyFrozenSet_New(PyObject *iterable)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
frozenset, содержащий объекты, возвращённые итерируемым объектом. Итерируемый объект может быть NULL для создания нового пустого frozenset. Возвращает новое множество в случае успеха или NULL при неудаче. Вызывает исключениеTypeError, если итерируемый объект не является итерируемым на самом деле.
Следующие функции и макросы доступны для экземпляров 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или его подтипа.
-
int
PySet_ClearFreeList()¶ Очищает список свободных элементов. Возвращает общее количество освобождённых элементов.
Новое в версии 3.3.