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