Документация Python неофициальный перевод

Объекты множеств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, представляющий тип set Python.

PyTypeObject PyFrozenSet_Type

Это экземпляр PyTypeObject, представляющий тип frozenset Python.

Следующие макросы проверки типа работают с указателями на любой объект 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_Clear(PyObject *set)

Очищает существующее множество от всех элементов.

int PySet_ClearFreeList()

Очищает список свободных блоков. Возвращает общее количество освобождённых элементов.

Новое в версии 3.3.