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