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

В этом разделе подробно описывается публичный API для объектов set и frozenset. Для доступа к любым функциям, не перечисленным ниже, лучше всего использовать либо абстрактный протокол объектов (включая PyObject_CallMethod(), PyObject_RichCompareBool(), PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(), : c:func: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
Part of the Stable ABI.

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

PyTypeObject PyFrozenSet_Type
Part of the Stable 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, но не является экземпляром подтипа. Эта функция всегда успешна.

Добавлено в версии 3.10.

int PyAnySet_CheckExact(PyObject *p)

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

int PyFrozenSet_CheckExact(PyObject *p)

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

PyObject *PySet_New(PyObject *iterable)
Return value: New reference. Part of the Stable ABI.

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

PyObject *PyFrozenSet_New(PyObject *iterable)
Return value: New reference. Part of the Stable ABI.

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

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

Py_ssize_t PySet_Size(PyObject *anyset)
Part of the Stable ABI.

Возвращает длину объекта 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)
Part of the Stable ABI.

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

int PySet_Add(PyObject *set, PyObject *key)
Part of the Stable ABI.

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

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

int PySet_Discard(PyObject *set, PyObject *key)
Part of the Stable ABI.

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

PyObject *PySet_Pop(PyObject *set)
Return value: New reference. Part of the Stable ABI.

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

int PySet_Clear(PyObject *set)
Part of the Stable ABI.

Опустошить существующий набор всех элементов.

Вернуться на верх