Объекты множеств
В этом разделе подробно описан публичный 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). ВызываетPyExc_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 не имеет хеш-значения. ВызываетPyExc_SystemErrorесли anyset не являетсяset,frozensetили экземпляром подтипа.
-
int PySet_Add(PyObject *set, PyObject *key) -
Часть Стабильного АПИ.
Добавляет ключ в экземпляр
set. Также работает с экземплярамиfrozenset(как иPyTuple_SetItem(), может использоваться для заполнения значений новых frozensets до их экспонирования другому коду). Возвращает0при успехе или-1при ошибке. ВызываетTypeError, если ключ не хешируем. ВызываетMemoryError, если нет места для роста. ВызываетSystemError, если множество не является экземпляромsetили его подтипа.
Следующие функции доступны для экземпляров set или его подтипов, но не для экземпляров frozenset или его подтипов.
-
int PySet_Discard(PyObject *set, PyObject *key) -
Часть Стабильного АПИ.
Возвращает
1если элемент найден и удалён,0если элемент не найден (никаких действий не выполнено), и-1если возникла ошибка. Не вызываетKeyErrorдля отсутствующих ключей. ВызываетTypeError, если ключ не хешируем. В отличие от метода Pythondiscard(), эта функция не автоматически преобразует нехешируемые множества во временные frozensets. ВызываетPyExc_SystemErrorесли множество не является экземпляромsetили его подтипа.
-
PyObject *PySet_Pop(PyObject *set) -
Значение возврата: Новая ссылка. Часть Стабильного АПИ.
Возвращает новую ссылку на произвольный объект в множестве и удаляет объект из множества. Возвращает
NULLпри ошибке. ВызываетKeyError, если множество пустое. ВызываетSystemError, если множество не является экземпляромsetили его подтипа.
-
int PySet_Clear(PyObject *set) -
Часть Стабильного АПИ.
Очищает существующее множество от всех элементов.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/set.html