Установить объекты

В этом разделе описывается публичный 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()).

type PySetObject

Этот подтип PyObject используется для хранения внутренних данных объектов set и frozenset. Он похож на PyDictObject тем, что имеет фиксированный размер для небольших наборов (подобно хранению кортежей) и будет указывать на отдельный блок памяти переменного размера для наборов среднего и большого размера (подобно хранению списков). Ни одно из полей этой структуры не должно считаться общедоступным, и все они могут быть изменены. Весь доступ должен осуществляться через документированный API, а не путем манипулирования значениями в структуре.

PyTypeObject PySet_Type
Часть Стабильный ABI.

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

PyTypeObject PyFrozenSet_Type
Часть Стабильный ABI.

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

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

Возвращает true, если p является объектом set, но не является экземпляром подтипа. Эта функция всегда успешна.

Added in version 3.10.

int PyAnySet_CheckExact(PyObject *p)

Возвращает true, если p является объектом set или объектом frozenset, но не является экземпляром подтипа. Эта функция всегда успешна.

int PyFrozenSet_CheckExact(PyObject *p)

Возвращает true, если p является объектом frozenset, но не является экземпляром подтипа. Эта функция всегда успешна.

PyObject *PySet_New(PyObject *iterable)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

PyObject *PyFrozenSet_New(PyObject *iterable)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Возвращает новый frozenset, содержащий объекты, возвращенные iterable. iterable может быть NULL, чтобы создать новый пустой набор frozenset. Возвращает новый набор в случае успеха или NULL в случае неудачи. Вызов TypeError, если iterable не является итерируемым.

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

Py_ssize_t PySet_Size(PyObject *anyset)
Часть Стабильный ABI.

Возвращает длину объекта set или frozenset. Эквивалентно len(anyset). Вызывает ошибку SystemError, если anyset не является set, frozenset или экземпляром подтипа.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

Макроформа PySet_Size() без проверки ошибок.

int PySet_Contains(PyObject *anyset, PyObject *key)
Часть Стабильный ABI.

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

int PySet_Add(PyObject *set, PyObject *key)
Часть Стабильный ABI.

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

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

int PySet_Discard(PyObject *set, PyObject *key)
Часть Стабильный ABI.

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

PyObject *PySet_Pop(PyObject *set)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

int PySet_Clear(PyObject *set)
Часть Стабильный ABI.

Очистите существующее множество от всех элементов. Возвращает 0 при успехе. Возвращает -1 и поднимает SystemError, если set не является экземпляром set или его подтипом.