Объекты множеств
В этом разделе подробно описан публичный 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, представляющий тип Pythonset.
-
PyTypeObject PyFrozenSet_Type -
Часть Стабильной ABI.
Это экземпляр
PyTypeObject, представляющий тип Pythonfrozenset.
Следующие макросы проверки типов работают с указателями на любые объекты 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, если ключ не хешируем. В отличие от метода Pythondiscard(), эта функция не автоматически преобразует не хешируемые множества в временные неизменяемые множества. Возбуждает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