Установить объекты¶
В этом разделе описывается публичный 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
, но не является экземпляром подтипа. Эта функция всегда успешна.Added in version 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__()
, эта функция не преобразует нехешируемые множества во временные фростенсеты автоматически. ВызовитеTypeError
, если ключ является нехешируемым. ВызовSystemError
, если anyset не являетсяset
,frozenset
или экземпляром подтипа.
-
int PySet_Add(PyObject *set, PyObject *key)¶
- Часть Стабильный ABI.
Добавляет ключ к экземпляру
set
. Также работает с экземплярамиfrozenset
(как иPyTuple_SetItem()
, может использоваться для заполнения значений совершенно новых фростенсетов до того, как они будут открыты для другого кода). Возвращает0
при успехе или-1
при неудаче. ВызовитеTypeError
, если ключ не поддается хэшированию. ВызовитеMemoryError
, если нет места для роста. ВызовитеSystemError
, если set не является экземпляромset
или его подтипом.
Следующие функции доступны для экземпляров set
или его подтипов, но не для экземпляров frozenset
или его подтипов.
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- Часть Стабильный ABI.
Возвращает
1
, если ключ найден и удален,0
, если не найден (никаких действий не предпринимается), и-1
, если произошла ошибка. Не возвращаетKeyError
для отсутствующих ключей. ВызываетTypeError
, если ключ не поддается хэшированию. В отличие от метода Pythondiscard()
, эта функция не преобразует нехешируемые множества во временные фростенсеты. ВызываетSystemError
, если set не является экземпляромset
или его подтипом.
-
PyObject *PySet_Pop(PyObject *set)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Возвращает новую ссылку на произвольный объект в set и удаляет объект из set. При неудаче возвращает
NULL
. ВозвращаетKeyError
, если набор пуст. ВызываетSystemError
, если set не является экземпляромset
или его подтипом.
-
int PySet_Clear(PyObject *set)¶
- Часть Стабильный ABI.
Очистите существующее множество от всех элементов. Возвращает
0
при успехе. Возвращает-1
и поднимаетSystemError
, если set не является экземпляромset
или его подтипом.