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

tuple.md

156 строк · 10.7 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.5/c-api/tuple.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты кортежей89**`PyTupleObject`**1011Этот подтип [`PyObject`](https://python-all.ru/3.5/c-api/structures.html#c.PyObject) представляет объект кортежа Python.1213**[PyTypeObject](https://python-all.ru/3.5/c-api/type.html#c.PyTypeObject) `PyTuple_Type`**1415Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.5/c-api/type.html#c.PyTypeObject) представляет тип кортежа Python; это tот же объект, что и [`tuple`](https://python-all.ru/3.5/library/stdtypes.html#tuple) на уровне Python.1617#### `int PyTuple_Check(PyObject *p)`1819Возвращает истину, если *p* является объектом кортежа или экземпляром подтипа типа tuple type.2021#### `int PyTuple_CheckExact(PyObject *p)`2223Возвращает истину, если *p* является объектом кортежа, но не экземпляром подтипа tuple type.2425#### `PyObject* PyTuple_New(Py_ssize_t len)`2627*Возвращаемое значение: новая ссылка.*2829Возвращает новый объект-кортеж размера *len* или *NULL* в случае ошибки.3031#### `PyObject* PyTuple_Pack(Py_ssize_t n, ...)`3233*Возвращаемое значение: новая ссылка.*3435Возвращает новый объект-кортеж размера *n* или *NULL* в случае ошибки. Значения кортежа инициализируются последующими *n* аргументами C, указывающими на объекты Python. `PyTuple_Pack(2, a, b)` эквивалентен `Py_BuildValue("(OO)", a, b)`.3637#### `Py_ssize_t PyTuple_Size(PyObject *p)`3839Принимает указатель на объект кортежа и возвращает размер этого кортежа.4041#### `Py_ssize_t PyTuple_GET_SIZE(PyObject *p)`4243Возвращает размер кортежа *p*, который не должен быть *NULL* и должен указывать на кортеж; проверка ошибок не выполняется.4445#### `PyObject* PyTuple_GetItem(PyObject *p, Py_ssize_t pos)`4647*Возвращаемое значение: заимствованная ссылка.*4849Возвращает объект на позиции *pos* в кортеже, на который указывает *p*. Если *pos* выходит за границы, возвращает *NULL* и устанавливает исключение [`IndexError`](https://python-all.ru/3.5/library/exceptions.html#IndexError).5051#### `PyObject* PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)`5253*Возвращаемое значение: заимствованная ссылка.*5455Как [`PyTuple_GetItem()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyTuple_GetItem), но не проверяет свои аргументы.5657#### `PyObject* PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)`5859*Возвращаемое значение: новая ссылка.*6061Извлекает срез кортежа, на который указывает *p*, от *low* до *high* и возвращает его в виде нового кортежа.6263#### `int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)`6465Вставляет ссылку на объект *o* в позицию *pos* кортежа, на который указывает *p*. Возвращает `0` в случае успеха.6667> **Примечание**68>69> Эта функция «крадёт» ссылку на *o*.7071#### `void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)`7273Как [`PyTuple_SetItem()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyTuple_SetItem), но без проверки ошибок; должен *использоваться только* для заполнения только что созданных кортежей.7475> **Примечание**76>77> Эта функция «крадёт» ссылку на *o*.7879#### `int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)`8081Can 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`](https://python-all.ru/3.5/library/exceptions.html#MemoryError) or [`SystemError`](https://python-all.ru/3.5/library/exceptions.html#SystemError).8283#### `int PyTuple_ClearFreeList()`8485Очищает список свободных элементов. Возвращает общее количество освобождённых элементов.8687# Объекты структурных кортежей8889Объекты структурных последовательностей – это C-аналог объектов [`namedtuple()`](https://python-all.ru/3.5/library/collections.html#collections.namedtuple), т.е. последовательности, элементы которой также доступны через атрибуты. Чтобы создать структурную последовательность, сначала нужно создать конкретный тип структурной последовательности.9091#### `PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc)`9293Создаёт новый тип структурного кортежа из данных в *desc*, описанных ниже. Экземпляры полученного типа могут быть созданы с помощью [`PyStructSequence_New()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyStructSequence_New).9495#### `void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)`9697Инициализирует тип структурного кортежа *type* из *desc* на месте.9899#### `int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)`100101То же, что и `PyStructSequence_InitType`, но возвращает `0` в случае успеха и `-1` в случае ошибки.102103Новое в версии 3.4.104105**`PyStructSequence_Desc`**106107Содержит метаинформацию о типе структурного кортежа, который необходимо создать.108109| Поле | Тип C | Значение |110| --- | --- | --- |111| `name` | `char *` | имя типа структурной последовательности |112| `doc` | `char *` | указатель на docstring для типа или NULL, чтобы опустить |113| `fields` | `PyStructSequence_Field *` | указатель на массив, завершающийся *NULL*, с именами полей нового типа |114| `n_in_sequence` | `int` | количество полей, доступных со стороны Python (при использовании в качестве кортежа) |115116**`PyStructSequence_Field`**117118Описывает поле структурной последовательности. Поскольку структурная последовательность моделируется как кортеж, все поля имеют тип [`PyObject*`](https://python-all.ru/3.5/c-api/structures.html#c.PyObject). Индекс в массиве `fields` объекта [`PyStructSequence_Desc`](https://python-all.ru/3.5/c-api/tuple.html#c.PyStructSequence_Desc) определяет, какое поле структурной последовательности описывается.119120| Поле | Тип C | Значение |121| --- | --- | --- |122| `name` | `char *` | имя поля или *NULL* для завершения списка именованных полей; установите в PyStructSequence\_UnnamedField, чтобы оставить безымянным |123| `doc` | `char *` | docstring поля или *NULL* для пропуска |124125**char\* `PyStructSequence_UnnamedField`**126127Специальное значение для имени поля, чтобы оставить его безымянным.128129#### `PyObject* PyStructSequence_New(PyTypeObject *type)`130131Создаёт экземпляр *type*, который должен быть создан с помощью [`PyStructSequence_NewType()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyStructSequence_NewType).132133#### `PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)`134135Возвращает объект на позиции *pos* в структурированной последовательности, на которую указывает *p*. Проверка границ не выполняется.136137#### `PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)`138139Макрос, эквивалентный [`PyStructSequence_GetItem()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyStructSequence_GetItem).140141#### `void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)`142143Устанавливает поле по индексу *pos* в struct sequence *p* в значение *o*. Как и [`PyTuple_SET_ITEM()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyTuple_SET_ITEM), это следует использовать только для заполнения совсем новых экземпляров.144145> **Примечание**146>147> Эта функция «крадёт» ссылку на *o*.148149#### `PyObject* PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)`150151Макрос, эквивалентный [`PyStructSequence_SetItem()`](https://python-all.ru/3.5/c-api/tuple.html#c.PyStructSequence_SetItem).152153> **Примечание**154>155> Эта функция «крадёт» ссылку на *o*.156