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