Объекты кортежа¶
-
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
в случае ошибки. Это эквивалент выражения Pythonp[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.