Объекты кортежей¶
-
PyTypeObject PyTuple_Type¶
- Часть Стабильный ABI.
Этот экземпляр
PyTypeObject
представляет тип Python tuple; это тот же объект, что иtuple
в слое Python.
-
int PyTuple_Check(PyObject *p)¶
Возвращает true, если p является объектом кортежа или экземпляром подтипа типа tuple. Эта функция всегда работает успешно.
-
int PyTuple_CheckExact(PyObject *p)¶
Возвращает true, если p является объектом кортежа, но не является экземпляром подтипа типа tuple. Эта функция всегда работает успешно.
-
PyObject *PyTuple_New(Py_ssize_t len)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Возвращает новый объект кортежа размера len, или
NULL
в случае неудачи.
-
PyObject *PyTuple_Pack(Py_ssize_t n, ...)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Возвращает новый кортежный объект размера n, или
NULL
в случае неудачи. Значения кортежей инициализируются последующими n аргументами C, указывающими на объекты Python.PyTuple_Pack(2, a, b)
эквивалентноPy_BuildValue("(OO)", a, b)
.
-
Py_ssize_t PyTuple_Size(PyObject *p)¶
- Часть Стабильный ABI.
Принимает указатель на объект кортежа и возвращает размер этого кортежа.
-
Py_ssize_t PyTuple_GET_SIZE(PyObject *p)¶
Возвращает размер кортежа p, который должен быть не``NULL`` и указывать на кортеж; проверка ошибок не производится.
-
PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)¶
- Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.
Возвращает объект в позиции pos в кортеже, на который указывает p. Если pos отрицательна или выходит за пределы, верните
NULL
и установите исключениеIndexError
.Возвращаемая ссылка заимствуется из кортежа p (то есть: она действительна только до тех пор, пока у вас есть ссылка на p). Чтобы получить strong reference, используйте
Py_NewRef(PyTuple_GetItem(...))
илиPySequence_GetItem()
.
-
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)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Возвращает фрагмент кортежа, на который указывает p, между low и high, или
NULL
в случае неудачи. Это эквивалентно выражениюp[low:high]
в Python. Индексация с конца кортежа не поддерживается.
-
int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)¶
- Часть Стабильный ABI.
Вставляет ссылку на объект o в позицию pos кортежа, на который указывает p. При успехе возвращается
0
. Если pos выходит за границы, верните-1
и установите исключениеIndexError
.Примечание
Эта функция «крадет» ссылку на o и отбрасывает ссылку на элемент, уже находящийся в кортеже в затронутой позиции.
-
void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)¶
Подобен
PyTuple_SetItem()
, но не проверяет ошибки и должен только использоваться для заполнения совершенно новых кортежей.Проверка границ выполняется как утверждение, если Python построен в формате debug mode или
with assertions
.Примечание
Эта функция «крадет» ссылку на o и, в отличие от
PyTuple_SetItem()
, не отбрасывает ссылку на любой заменяемый элемент; любая ссылка в кортеже на позиции pos будет утечка.Предупреждение
Этот макрос следует только использовать для кортежей, которые только что созданы. Использование этого макроса для кортежа, который уже используется (или, другими словами, имеет refcount > 1), может привести к неопределенному поведению.
-
int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)¶
Может использоваться для изменения размера кортежа. newsize будет новой длиной кортежа. Поскольку кортежи предполагаются неизменяемыми, эту функцию следует использовать только в том случае, если существует только одна ссылка на объект. Не используйте эту функцию, если кортеж может быть уже известен другой части кода. В конце кортеж всегда будет увеличиваться или уменьшаться. Думайте об этом как об уничтожении старого кортежа и создании нового, только более эффективно. В случае успеха возвращает
0
. Клиентский код никогда не должен предполагать, что результирующее значение*p
будет таким же, как и до вызова этой функции. Если объект, на который ссылается*p
, заменяется, исходный*p
уничтожается. В случае неудачи возвращается-1
,*p
устанавливается вNULL
, а также поднимаетсяMemoryError
илиSystemError
.
Объекты последовательности структур¶
Объекты последовательности struct - это эквивалент объектов namedtuple()
на языке C, т.е. последовательность, к элементам которой можно обращаться через атрибуты. Чтобы создать последовательность struct, сначала нужно создать определенный тип последовательности struct.
-
PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Создайте новый тип последовательности struct из данных в desc, описанных ниже. Экземпляры полученного типа могут быть созданы с помощью
PyStructSequence_New()
.
-
void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)¶
Инициализирует тип последовательности struct type из desc на месте.
-
int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)¶
То же самое, что и
PyStructSequence_InitType
, но возвращает0
при успехе и-1
при неудаче.Added in version 3.4.
-
type PyStructSequence_Desc¶
- Часть Стабильный ABI (включая всех членов).
Содержит метаинформацию создаваемого типа последовательности struct.
-
const char *name¶
Имя типа последовательности struct.
-
const char *doc¶
Указатель на docstring для типа или
NULL
для опускания.
-
PyStructSequence_Field *fields¶
Указатель на
NULL
-терминированный массив с именами полей нового типа.
-
int n_in_sequence¶
Количество полей, видимых со стороны Python (если используется как кортеж).
-
const char *name¶
-
type PyStructSequence_Field¶
- Часть Стабильный ABI (включая всех членов).
Описывает поле последовательности struct. Поскольку последовательность struct моделируется как кортеж, все поля типизируются как PyObject*. Индекс в массиве
fields
массиваPyStructSequence_Desc
определяет, какое поле последовательности структур описывается.-
const char *name¶
Имя для поля или
NULL
, чтобы завершить список именованных полей, установите значениеPyStructSequence_UnnamedField
, чтобы оставить поле неименованным.
-
const char *doc¶
Поле docstring или
NULL
, чтобы опустить его.
-
const char *name¶
-
const char *const PyStructSequence_UnnamedField¶
- Часть Стабильный ABI с версии 3.11.
Специальное значение для имени поля, чтобы оставить его безымянным.
Изменено в версии 3.9: Тип был изменен с
char *
.
-
PyObject *PyStructSequence_New(PyTypeObject *type)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Создает экземпляр type, который должен быть создан с помощью
PyStructSequence_NewType()
.
-
PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)¶
- Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.
Возвращает объект в позиции pos в последовательности struct, на которую указывает p.
Проверка границ выполняется как утверждение, если Python построен в формате debug mode или
with assertions
.
-
PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)¶
- Возвращаемое значение: Заимствованная ссылка.
Псевдоним для
PyStructSequence_GetItem()
.Изменено в версии 3.13: Теперь реализовано как псевдоним для
PyStructSequence_GetItem()
.
-
void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)¶
- Часть Стабильный ABI.
Устанавливает поле с индексом pos последовательности struct p в значение o. Как и
PyTuple_SET_ITEM()
, это должно использоваться только для заполнения совершенно новых экземпляров.Проверка границ выполняется как утверждение, если Python построен в формате debug mode или
with assertions
.Примечание
Эта функция «крадет» ссылку на o.
-
void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)¶
Псевдоним для
PyStructSequence_SetItem()
.Изменено в версии 3.13: Теперь реализовано как псевдоним для
PyStructSequence_SetItem()
.