Объекты множества
В разделе подробно рассказано об открытом 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) - Return value: New reference.
Возвращает новое
set
, содержащий возвращенные iterable объекты. iterable может бытьNULL
для создания нового пустого множества. Возвращает новое множество в случае успеха илиNULL
в случае неудачи. ВызываетсяTypeError
, если iterable фактически не итерируется. Конструктор также полезен для копирования множества (c=set(s)
).
-
PyObject*
PyFrozenSet_New
(PyObject *iterable) - Return value: New reference.
Возвращает новое
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
, если key не хэшируемый. В отличие от метода Pythondiscard()
, эта функция не преобразует автоматически нехешируемые наборы во временные замороженные множества. ВызываетсяPyExc_SystemError
, если set не является экземпляромset
или его подтипа.
-
PyObject*
PySet_Pop
(PyObject *set) - Return value: New reference.
Возвращает новую ссылку на произвольный объект в set и удаляет объект из set. Возвращает
NULL
в случае ошибки. ВызываетсяKeyError
, если множество пусто. ВызываетсяSystemError
, если set не является экземпляромset
или его подтипа.
-
int
PySet_Clear
(PyObject *set) Очищает существующее множество от всех элементов.
-
int
PySet_ClearFreeList
() Очищает свободный список. Возвращает общее количество освобожденных элементов.
Добавлено в версии 3.3.