Объекты множеств
В этом разделе подробно описан публичный 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) -
Возвращает true, если p — объект
setили экземпляр подтипа.
-
int PyFrozenSet_Check(PyObject *p) -
Возвращает true, если p — объект
frozensetили экземпляр подтипа.
-
int PyAnySet_Check(PyObject *p) -
Возвращает true, если p — объект
set,frozensetили экземпляр подтипа.
-
int PyAnySet_CheckExact(PyObject *p) -
Возвращает true, если p — объект
setилиfrozenset, но не экземпляр подтипа.
-
int PyFrozenSet_CheckExact(PyObject *p) -
Возвращает true, если 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) -
Очищает существующее множество от всех элементов.
-
int PySet_ClearFreeList() -
Очищает список свободных элементов. Возвращает общее количество освобожденных элементов.
Введено в версии 3.3.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/set.html