Spec-Zone.ru › Python 3.9

Объекты множеств

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

PyTypeObject PyFrozenSet_Type

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

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

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

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

int PySet_Clear(PyObject *set)

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

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/c-api/set.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API