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

PyTupleObject

Данный подтип PyObject представляет объект кортежа Python.

PyTypeObject PyTuple_Type

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

int PyTuple_Check(PyObject *p)

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

int PyTuple_CheckExact(PyObject *p)

Возвращает истину, если 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 в случае ошибки. Значения кортежа инициализируются последующими аргументами C n, указывающими на объекты 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.