Объекты кортежей

type PyTupleObject

Этот подтип PyObject представляет объект кортежа Python.

PyTypeObject PyTuple_Type
Часть Стабильный ABI.

Этот экземпляр PyTypeObject представляет тип Python tuple; это тот же объект, что и tuple в слое Python.

int PyTuple_Check(PyObject *p)

Возвращает true, если p является объектом кортежа или экземпляром подтипа типа tuple. Эта функция всегда работает успешно.

int PyTuple_CheckExact(PyObject *p)

Возвращает true, если p является объектом кортежа, но не является экземпляром подтипа типа tuple. Эта функция всегда работает успешно.

PyObject *PyTuple_New(Py_ssize_t len)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Возвращает новый объект кортежа размера len, или NULL в случае неудачи.

PyObject *PyTuple_Pack(Py_ssize_t n, ...)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Возвращает новый кортежный объект размера n, или NULL в случае неудачи. Значения кортежей инициализируются последующими n аргументами C, указывающими на объекты Python. PyTuple_Pack(2, a, b) эквивалентно Py_BuildValue("(OO)", a, b).

Py_ssize_t PyTuple_Size(PyObject *p)
Часть Стабильный ABI.

Принимает указатель на объект кортежа и возвращает размер этого кортежа.

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)

Возвращает размер кортежа p, который должен быть не``NULL`` и указывать на кортеж; проверка ошибок не производится.

PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.

Возвращает объект в позиции pos в кортеже, на который указывает p. Если pos отрицательна или выходит за пределы, верните NULL и установите исключение IndexError.

Возвращаемая ссылка заимствуется из кортежа p (то есть: она действительна только до тех пор, пока у вас есть ссылка на p). Чтобы получить strong reference, используйте Py_NewRef(PyTuple_GetItem(...)) или PySequence_GetItem().

PyObject *PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
Возвращаемое значение: Заимствованная ссылка.

Как и PyTuple_GetItem(), но не проверяет свои аргументы.

PyObject *PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Возвращает фрагмент кортежа, на который указывает p, между low и high, или NULL в случае неудачи. Это эквивалентно выражению p[low:high] в Python. Индексация с конца кортежа не поддерживается.

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
Часть Стабильный ABI.

Вставляет ссылку на объект o в позицию pos кортежа, на который указывает p. При успехе возвращается 0. Если pos выходит за границы, верните -1 и установите исключение IndexError.

Примечание

Эта функция «крадет» ссылку на o и отбрасывает ссылку на элемент, уже находящийся в кортеже в затронутой позиции.

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)

Подобен PyTuple_SetItem(), но не проверяет ошибки и должен только использоваться для заполнения совершенно новых кортежей.

Проверка границ выполняется как утверждение, если Python построен в формате debug mode или with assertions.

Примечание

Эта функция «крадет» ссылку на o и, в отличие от PyTuple_SetItem(), не отбрасывает ссылку на любой заменяемый элемент; любая ссылка в кортеже на позиции pos будет утечка.

Предупреждение

Этот макрос следует только использовать для кортежей, которые только что созданы. Использование этого макроса для кортежа, который уже используется (или, другими словами, имеет refcount > 1), может привести к неопределенному поведению.

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)

Может использоваться для изменения размера кортежа. newsize будет новой длиной кортежа. Поскольку кортежи предполагаются неизменяемыми, эту функцию следует использовать только в том случае, если существует только одна ссылка на объект. Не используйте эту функцию, если кортеж может быть уже известен другой части кода. В конце кортеж всегда будет увеличиваться или уменьшаться. Думайте об этом как об уничтожении старого кортежа и создании нового, только более эффективно. В случае успеха возвращает 0. Клиентский код никогда не должен предполагать, что результирующее значение *p будет таким же, как и до вызова этой функции. Если объект, на который ссылается *p, заменяется, исходный *p уничтожается. В случае неудачи возвращается -1, *p устанавливается в NULL, а также поднимается MemoryError или SystemError.

Объекты последовательности структур

Объекты последовательности struct - это эквивалент объектов namedtuple() на языке C, т.е. последовательность, к элементам которой можно обращаться через атрибуты. Чтобы создать последовательность struct, сначала нужно создать определенный тип последовательности struct.

PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Создайте новый тип последовательности struct из данных в desc, описанных ниже. Экземпляры полученного типа могут быть созданы с помощью PyStructSequence_New().

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)

Инициализирует тип последовательности struct type из desc на месте.

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)

То же самое, что и PyStructSequence_InitType, но возвращает 0 при успехе и -1 при неудаче.

Added in version 3.4.

type PyStructSequence_Desc
Часть Стабильный ABI (включая всех членов).

Содержит метаинформацию создаваемого типа последовательности struct.

const char *name

Имя типа последовательности struct.

const char *doc

Указатель на docstring для типа или NULL для опускания.

PyStructSequence_Field *fields

Указатель на NULL-терминированный массив с именами полей нового типа.

int n_in_sequence

Количество полей, видимых со стороны Python (если используется как кортеж).

type PyStructSequence_Field
Часть Стабильный ABI (включая всех членов).

Описывает поле последовательности struct. Поскольку последовательность struct моделируется как кортеж, все поля типизируются как PyObject*. Индекс в массиве fields массива PyStructSequence_Desc определяет, какое поле последовательности структур описывается.

const char *name

Имя для поля или NULL, чтобы завершить список именованных полей, установите значение PyStructSequence_UnnamedField, чтобы оставить поле неименованным.

const char *doc

Поле docstring или NULL, чтобы опустить его.

const char *const PyStructSequence_UnnamedField
Часть Стабильный ABI с версии 3.11.

Специальное значение для имени поля, чтобы оставить его безымянным.

Изменено в версии 3.9: Тип был изменен с char *.

PyObject *PyStructSequence_New(PyTypeObject *type)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Создает экземпляр type, который должен быть создан с помощью PyStructSequence_NewType().

PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.

Возвращает объект в позиции pos в последовательности struct, на которую указывает p.

Проверка границ выполняется как утверждение, если Python построен в формате debug mode или with assertions.

PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
Возвращаемое значение: Заимствованная ссылка.

Псевдоним для PyStructSequence_GetItem().

Изменено в версии 3.13: Теперь реализовано как псевдоним для PyStructSequence_GetItem().

void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
Часть Стабильный ABI.

Устанавливает поле с индексом pos последовательности struct p в значение o. Как и PyTuple_SET_ITEM(), это должно использоваться только для заполнения совершенно новых экземпляров.

Проверка границ выполняется как утверждение, если Python построен в формате debug mode или with assertions.

Примечание

Эта функция «крадет» ссылку на o.

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)

Псевдоним для PyStructSequence_SetItem().

Изменено в версии 3.13: Теперь реализовано как псевдоним для PyStructSequence_SetItem().