Документация 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 и возвращает его в виде нового кортежа.

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

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

Примечание

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

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

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

Примечание

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

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)

Can be used to resize a tuple. newsize will be the new length of the tuple. Because tuples are supposed to be immutable, this should only be used if there is only one reference to the object. Do not use this if the tuple may already be known to some other part of the code. The tuple will always grow or shrink at the end. Think of this as destroying the old tuple and creating a new one, only more efficiently. Returns 0 on success. Client code should never assume that the resulting value of *p will be the same as before calling this function. If the object referenced by *p is replaced, the original *p is destroyed. On failure, returns -1 and sets *p to NULL, and raises MemoryError or 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 char * имя типа структурной последовательности
doc char * указатель на docstring для типа или NULL, чтобы опустить
fields PyStructSequence_Field * указатель на массив, завершающийся NULL, с именами полей нового типа
n_in_sequence int количество полей, доступных со стороны Python (при использовании в качестве кортежа)
PyStructSequence_Field

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

Поле Тип C Значение
name char * имя поля или NULL для завершения списка именованных полей; установите в PyStructSequence_UnnamedField, чтобы оставить безымянным
doc char * docstring поля или 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.

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

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

Примечание

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