Установить объекты¶
В этом разделе подробно описывается публичный API для объектов set
и frozenset
. Для доступа к любым функциям, не перечисленным ниже, лучше всего использовать либо абстрактный протокол объектов (включая PyObject_CallMethod()
, PyObject_RichCompareBool()
, PyObject_Hash()
, PyObject_Repr()
, PyObject_IsTrue()
, : c:func: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
¶ - Part of the Stable ABI.
Это экземпляр
PyTypeObject
, представляющий тип Pythonset
.
-
PyTypeObject
PyFrozenSet_Type
¶ - Part of the Stable 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)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает новое
set
, содержащее объекты, возвращенные iterable. iterable может бытьNULL
для создания нового пустого множества. Возвращает новое множество в случае успеха илиNULL
в случае неудачи. ВызовTypeError
, если iterable не является итерируемым. Конструктор также полезен для копирования множества (c=set(s)
).
-
PyObject *
PyFrozenSet_New
(PyObject *iterable)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает новый
frozenset
, содержащий объекты, возвращенные iterable. iterable может бытьNULL
для создания нового пустого набора frozenset. Возвращает новый набор в случае успеха илиNULL
в случае неудачи. ВызовTypeError
, если iterable не является итерируемым.
Следующие функции и макросы доступны для экземпляров set
или frozenset
или экземпляров их подтипов.
-
Py_ssize_t
PySet_Size
(PyObject *anyset)¶ - Part of the Stable 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)¶ - Part of the Stable ABI.
Возвращает
1
, если найдено,0
, если не найдено, и-1
, если возникла ошибка. В отличие от метода Python__contains__()
, эта функция не преобразует автоматически нехешируемые множества во временные фростенсеты. Вызывает ошибкуTypeError
, если ключ является нехешируемым. ВызовPyExc_SystemError
, если anyset не являетсяset
,frozenset
или экземпляром подтипа.
-
int
PySet_Add
(PyObject *set, PyObject *key)¶ - Part of the Stable ABI.
Добавляет ключ к экземпляру
set
. Также работает с экземплярамиfrozenset
(как иPyTuple_SetItem()
, может использоваться для заполнения значений совершенно новых фростсетов до того, как они станут доступны другому коду). Возвращает0
при успехе или-1
при неудаче. Вызвать ошибкуTypeError
, если ключ не поддается хэшированию. Вызовите ошибкуMemoryError
, если нет места для роста. Вызовите ошибкуSystemError
, если set не является экземпляромset
или его подтипом.
Следующие функции доступны для экземпляров set
или его подтипов, но не для экземпляров frozenset
или его подтипов.
-
int
PySet_Discard
(PyObject *set, PyObject *key)¶ - Part of the Stable ABI.
Возвращает
1
, если найден и удален,0
, если не найден (никаких действий не предпринимается), и-1
, если возникла ошибка. Не выдаетKeyError
для отсутствующих ключей. ВызываетTypeError
, если ключ не поддается хэшированию. В отличие от метода Pythondiscard()
, эта функция не преобразует автоматически нехешируемые множества во временные фрозенсеты. ВызовPyExc_SystemError
, если set не является экземпляромset
или его подтипом.
-
PyObject *
PySet_Pop
(PyObject *set)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает новую ссылку на произвольный объект в set и удаляет объект из set. Возвращает
NULL
при неудаче. ВызываетKeyError
, если набор пуст. ВызватьSystemError
, если set не является экземпляромset
или его подтипом.
-
int
PySet_Clear
(PyObject *set)¶ - Part of the Stable ABI.
Опустошить существующий набор всех элементов.