Объекты множеств¶Set Objects
В этом разделе описывается публичный 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)¶ Возвращает true, если p является объектом
setили экземпляром подтипа. Эта функция всегда завершается успешно.
-
int
PyFrozenSet_Check(PyObject *p)¶ Возвращает true, если p является объектом
frozensetили экземпляром подтипа. Эта функция всегда завершается успешно.
-
int
PyAnySet_Check(PyObject *p)¶ Возвращает true, если p является объектом
set, объектомfrozensetили экземпляром подтипа. Эта функция всегда завершается успешно.
-
int
PyAnySet_CheckExact(PyObject *p)¶ Возвращает true, если p является объектом
setили объектомfrozenset, но не экземпляром подтипа. Эта функция всегда завершается успешно.
-
int
PyFrozenSet_CheckExact(PyObject *p)¶ Возвращает true, если p является объектом
frozenset, но не экземпляром подтипа. Эта функция всегда завершается успешно.
-
PyObject*
PySet_New(PyObject *iterable)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
set, содержащий объекты, полученные из iterable. iterable может бытьNULLдля создания нового пустого множества. При успехе возвращает новое множество, при неудаче –NULL. ВозбуждаетTypeError, если iterable на самом деле не итерируем. Конструктор также удобен для копирования множества (c=set(s)).
-
PyObject*
PyFrozenSet_New(PyObject *iterable)¶ - Возвращаемое значение: новая ссылка.
Возвращает новый
frozenset, содержащий объекты, полученные из iterable. iterable может бытьNULLдля создания нового пустого frozenset. При успехе возвращает новое множество, при неудаче –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, если произошла ошибка. В отличие от метода__contains__()в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. ВозбуждаетTypeError, если ключ нехэшируем. ВозбуждаетPyExc_SystemError, если любой набор не являетсяset,frozensetили экземпляром подтипа.
-
int
PySet_Add(PyObject *set, PyObject *key)¶ Добавляет ключ в экземпляр
set. Также работает с экземплярамиfrozenset(как иPyTuple_SetItem(), может использоваться для заполнения значений новых неизменяемых множеств до того, как они будут открыты другому коду). Возвращает0в случае успеха или-1при неудаче. ВозбуждаетTypeError, если ключ нехэшируем. ВозбуждаетMemoryError, если нет места для роста. ВозбуждаетSystemError, если set не является экземпляромsetили его подтипа.
Следующие функции доступны для экземпляров 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 не является экземпляромsetили его подтипа.