Документация 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)

Возвращает true, если p является объектом set или экземпляром подтипа.

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)
Возвращаемое значение: новая ссылка.

Возвращает новый set, содержащий объекты, возвращаемые iterable. Значение iterable может быть NULL для создания нового пустого set. Возвращает новый set при успехе или NULL при неудаче. Вызывает TypeError, если iterable на самом деле не является итерируемым. Конструктор также полезен для копирования set (c=set(s)).

PyObject* PyFrozenSet_New(PyObject *iterable)
Возвращаемое значение: новая ссылка.

Возвращает новый frozenset, содержащий объекты, возвращаемые iterable. Значение iterable может быть NULL для создания нового пустого frozenset. Возвращает новый 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, если возникла ошибка. В отличие от метода Python __contains__(), эта функция не преобразует автоматически нехешируемые множества во временные frozenset. Вызывает TypeError, если key нехешируем. Вызывает PyExc_SystemError, если anyset не является set, frozenset или экземпляром подтипа.

int PySet_Add(PyObject *set, PyObject *key)

Добавляет key в экземпляр set. Также работает с экземплярами frozenset (подобно PyTuple_SetItem(), её можно использовать для заполнения значений совершенно новых frozenset до того, как они будут открыты другому коду). Возвращает 0 при успехе или -1 при неудаче. Вызывает TypeError, если key нехешируем. Вызывает MemoryError, если нет места для роста. Вызывает SystemError, если set не является экземпляром set или его подтипа.

Следующие функции доступны для экземпляров set или его подтипов, но не для экземпляров frozenset или его подтипов.

int PySet_Discard(PyObject *set, PyObject *key)

Возвращает 1, если элемент найден и удалён, 0, если не найден (никаких действий не предпринимается), и -1, если произошла ошибка. Не возбуждает KeyError для отсутствующих ключей. Возбуждает TypeError, если ключ не хешируется. В отличие от метода Python discard(), эта функция не преобразует автоматически нехешируемые множества во временные frozenset. Возбуждает PyExc_SystemError, если set не является экземпляром set или его подтипа.

PyObject* PySet_Pop(PyObject *set)
Возвращаемое значение: новая ссылка.

Возвращает новую ссылку на произвольный объект из множества и удаляет объект из множества. В случае ошибки возвращает NULL. Вызывает KeyError, если множество пусто. Вызывает SystemError, если множество не является экземпляром set или его подтипа.

int PySet_Clear(PyObject *set)

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