Объекты множеств¶Set Objects
Новое в версии 2.5.
В этом разделе подробно описывается публичный 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, представляющий типsetPython.
-
PyTypeObject
PyFrozenSet_Type¶ Это экземпляр
PyTypeObject, представляющий типfrozensetPython.
Следующие макросы проверки типа работают с указателями на любой объект Python. Аналогично, функции-конструкторы работают с любым итерируемым объектом Python.
-
int
PySet_Check(PyObject *p)¶ Возвращает истину, если p является объектом
setили экземпляром подтипа.Новое в версии 2.6.
-
int
PyFrozenSet_Check(PyObject *p)¶ Возвращает истину, если p является объектом
frozensetили экземпляром подтипа.Новое в версии 2.6.
-
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)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
set, содержащий объекты, возвращённые итерируемым объектом. Итерируемый объект может быть NULL для создания нового пустого множества. Возвращает новое множество в случае успеха или NULL при неудаче. Вызывает исключениеTypeError, если итерируемый объект не является итерируемым на самом деле. Конструктор также полезен для копирования множества (c=set(s)).
-
PyObject*
PyFrozenSet_New(PyObject *iterable)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
frozenset, содержащий объекты, возвращённые итерируемым объектом. Итерируемый объект может быть NULL для создания нового пустого frozenset. Возвращает новое множество в случае успеха или NULL при неудаче. Вызывает исключениеTypeError, если итерируемый объект не является итерируемым на самом деле.Изменено в версии 2.6: Теперь гарантированно возвращает новый
frozenset. Ранее frozensets нулевой длины были синглтоном. Это мешало созданию новых frozensets с помощьюPySet_Add().
Следующие функции и макросы доступны для экземпляров set или frozenset, или экземпляров их подтипов.
-
Py_ssize_t
PySet_Size(PyObject *anyset)¶ Возвращает длину объекта
setилиfrozenset. Эквивалентноlen(anyset). ВозбуждаетPyExc_SystemError, если anyset не являетсяset,frozensetили экземпляром подтипа.Изменено в версии 2.5: Эта функция возвращала
int. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
Py_ssize_t
PySet_GET_SIZE(PyObject *anyset)¶ Макроформа
PySet_Size()без проверки ошибок.
-
int
PySet_Contains(PyObject *anyset, PyObject *key)¶ Возвращает
1, если элемент найден,0, если не найден, и-1, если произошла ошибка. В отличие от метода__contains__()в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. ВозбуждаетTypeError, если ключ нехэшируем. ВозбуждаетPyExc_SystemError, если любой набор не являетсяset,frozensetили экземпляром подтипа.
-
int
PySet_Add(PyObject *set, PyObject *key)¶ Добавляет ключ в экземпляр
set. Не применяется к экземплярамfrozenset. Возвращает0при успешном выполнении или-1при неудаче. ВызываетTypeError, если ключ нехэшируемый. ВызываетMemoryError, если нет места для увеличения. ВызываетSystemError, если set не является экземпляромsetили его подтипа.Изменено в версии 2.6: Теперь работает с экземплярами
frozensetили его подтипов. Как иPyTuple_SetItem(), может использоваться для заполнения значений новых frozensets до того, как они станут доступны другому коду.
Следующие функции доступны для экземпляров set или его подтипов, но не для экземпляров frozenset или его подтипов.
-
int
PySet_Discard(PyObject *set, PyObject *key)¶ Возвращает
1, если элемент найден и удалён,0, если не найден (действие не выполняется), и-1, если произошла ошибка. Не возбуждаетKeyErrorдля отсутствующих ключей. ВозбуждаетTypeError, если ключ нехэшируем. В отличие от методаdiscard()в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. ВозбуждаетPyExc_SystemError, если множество не является экземпляромsetили его подтипа.
-
PyObject*
PySet_Pop(PyObject *set)¶ - Возвращаемое значение: новая ссылка.
Возвращает новую ссылку на произвольный объект в множестве и удаляет объект из множества. Возвращает NULL при неудаче. Вызывает исключение
KeyError, если множество пусто. Вызывает исключениеSystemError, если множество не является экземпляромsetили его подтипа.