Документация Python неофициальный перевод

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

PyTupleObject

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

PyTypeObject PyTuple_Type

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

int PyTuple_Check(PyObject *p)

Возвращает истину, если p является объектом кортежа или экземпляром подтипа типа tuple type.

int PyTuple_CheckExact(PyObject *p)

Возвращает истину, если p является объектом кортежа, но не экземпляром подтипа tuple type.

PyObject* PyTuple_New(Py_ssize_t len)
Возвращаемое значение: новая ссылка.

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

PyObject* PyTuple_Pack(Py_ssize_t n, ...)
Возвращаемое значение: новая ссылка.

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

Py_ssize_t PyTuple_Size(PyObject *p)

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

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)

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

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

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

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)
Возвращаемое значение: новая ссылка.

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

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)

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

Примечание

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

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

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

Примечание

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

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)

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

int PyTuple_ClearFreeList()

Очищает список свободных элементов. Возвращает общее количество освобождённых элементов.

Объекты структурных кортежейStruct Sequence Objects

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

PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc)
Возвращаемое значение: новая ссылка.

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

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)

Инициализирует тип структурного кортежа type из desc на месте.

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)

То же, что и PyStructSequence_InitType, но возвращает 0 в случае успеха и -1 в случае ошибки.

Новое в версии 3.4.

PyStructSequence_Desc

Содержит метаинформацию о типе структурного кортежа, который необходимо создать.

Поле

Тип C

Значение

name

const char *

имя типа структурной последовательности

doc

const char *

указатель на строку документации для типа или NULL, чтобы пропустить

fields

PyStructSequence_Field *

указатель на массив, завершающийся NULL, с именами полей нового типа

n_in_sequence

int

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

PyStructSequence_Field

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

Поле

Тип C

Значение

name

const char *

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

doc

const char *

строка документации поля или NULL, чтобы пропустить

char* PyStructSequence_UnnamedField

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

PyObject* PyStructSequence_New(PyTypeObject *type)
Возвращаемое значение: новая ссылка.

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

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

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

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

Макрос, эквивалентный PyStructSequence_GetItem().

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

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

Примечание

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

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

Макрос, эквивалентный PyStructSequence_SetItem().

Примечание

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