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

PyTupleObject

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

PyTypeObject PyTuple_Type

Сущность PyTypeObject представляет тип кортежа Python; это тот же объект, что и tuple в слое Python.

int PyTuple_Check(PyObject *p)

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

int PyTuple_CheckExact(PyObject *p)

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

PyObject* PyTuple_New(Py_ssize_t len)
Return value: New reference.

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

PyObject* PyTuple_Pack(Py_ssize_t n, ...)
Return value: New reference.

Возвращает новый объект кортежа размера 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)
Return value: Borrowed reference.

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

PyObject* PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
Return value: Borrowed reference.

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

PyObject* PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
Return value: New reference.

Возвращает фрагмент кортежа, на который указывает 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()

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

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

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

PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc)
Return value: New reference.

Создать новый тип последовательности структуры из данных в 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)
Return value: New reference.

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

PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
Return value: Borrowed reference.

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

PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
Return value: Borrowed reference.

Макро-эквивалент PyStructSequence_GetItem().

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

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

Примечание

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

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

Макро-эквивалент PyStructSequence_SetItem().

Примечание

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