Объекты множеств
В этом разделе подробно описывается общедоступный 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для создания нового пустого 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__(), эта функция не автоматически преобразует нехешируемые множества в временные frozenset. Вызывает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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/set.html