Spec-Zone.ru › Python 3.11

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

В этом разделе подробно описан публичный 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, но не экземпляром подтипа. Эта функция всегда выполняется успешно.

Добавлена в версии 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 для создания нового пустого неизменяемого множества. Возвращает новое множество при успехе или 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, если key не хешируется. Вызывает SystemError, если anyset не является set, frozenset или экземпляром подтипа.

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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