Разбор аргументов и создание значений
Эти функции полезны при создании собственных функций и методов расширения. Дополнительная информация и примеры доступны в разделе Расширение и встраивание интерпретатора Python.
Первые три описанные здесь функции — PyArg_ParseTuple(), PyArg_ParseTupleAndKeywords() и PyArg_Parse() — используют строки формата, которые сообщают функции ожидаемые аргументы. Во всех этих функциях строки формата используют один и тот же синтаксис.
Разбор аргументов
Строка формата состоит из нуля или более «единиц формата». Единица формата описывает один объект Python; обычно это один символ или последовательность единиц формата в круглых скобках. За некоторыми исключениями, единица формата, не являющаяся последовательностью в круглых скобках, обычно соответствует одному аргументу-адресу для этих функций. В следующем описании заключённая в кавычки форма — это единица формата; элемент в (круглых) скобках — тип объекта Python, соответствующий единице формата; а элемент в [квадратных] скобках — тип переменной (переменных) C, адрес которой следует передать.
Строки и буферы
Примечание
В Python 3.12 и более ранних версиях перед подключением Python.h необходимо определить макрос PY_SSIZE_T_CLEAN, чтобы использовать все варианты форматов # (s#, y# и т. д.), описанные ниже. В Python 3.13 и более поздних версиях это не требуется.
Эти форматы позволяют обращаться к объекту как к непрерывному блоку памяти. Вам не нужно предоставлять необработанное хранилище для возвращаемой области Unicode или bytes.
Если не указано иное, буферы не завершаются нулевым символом NUL.
Есть три способа преобразовать строки и буферы в C:
- Форматы, такие как
y*иs*, заполняют структуруPy_buffer. Это блокирует базовый буфер, чтобы вызывающий код мог впоследствии использовать его даже внутри блокаPy_BEGIN_ALLOW_THREADSбез риска изменения размера или уничтожения изменяемых данных. Поэтому необходимо вызватьPyBuffer_Release()после завершения обработки данных (или при любом досрочном прекращении обработки). - Форматы
es,es#,etиet#выделяют буфер для результата. Необходимо вызватьPyMem_Free()после завершения обработки данных (или при любом досрочном прекращении обработки). -
Другие форматы принимают
strили доступный только для чтения объект, подобный bytes, напримерbytes, и предоставляют указательconst char *на его буфер. В этом случае буфер является «заимствованным»: им управляет соответствующий объект Python, и его время жизни совпадает со временем жизни этого объекта. Вам не потребуется самостоятельно освобождать память.Чтобы гарантировать безопасное заимствование базового буфера, поле объекта
PyBufferProcs.bf_releasebufferдолжно иметь значениеNULL. Это исключает распространённые изменяемые объекты, такие какbytearray, а также некоторые объекты, доступные только для чтения, напримерmemoryviewобъектаbytes.Помимо требования
bf_releasebuffer, проверка неизменяемости входного объекта не выполняется (например, не проверяется, будет ли он удовлетворять запросу на запись в буфер или сможет ли другой поток изменить данные).
-
s (str) [const char *] -
Преобразует объект Unicode в указатель C на символьную строку. Указатель на существующую строку сохраняется в переменной-указателе на символы, адрес которой вы передаёте. Строка C завершается нулевым символом NUL. Строка Python не должна содержать встроенных нулевых кодовых точек; в противном случае возникает исключение
ValueError. Объекты Unicode преобразуются в строки C с использованием кодировки'utf-8'. Если это преобразование не удаётся, возникает исключениеUnicodeError.Примечание
Этот формат не принимает объекты, подобные bytes. Если вы хотите принимать пути файловой системы и преобразовывать их в символьные строки C, предпочтительно использовать формат
O&с функциейPyUnicode_FSConverter()в качестве преобразователя.Изменено в версии 3.5: Ранее при обнаружении встроенных нулевых кодовых точек в строке Python возникало исключение
TypeError. -
s* (str or bytes-like object) [Py_buffer] -
Этот формат принимает как объекты Unicode, так и объекты, подобные bytes. Он заполняет предоставленную вызывающим кодом структуру
Py_buffer. В этом случае результирующая строка C может содержать встроенные байты NUL. Объекты Unicode преобразуются в строки C с использованием кодировки'utf-8'. -
s# (str, read-only bytes-like object) [const char *, Py_ssize_t] -
Как
s*, но предоставляет заимствованный буфер. Результат сохраняется в двух переменных C: первая — указатель на строку C, вторая — её длина. Строка может содержать встроенные нулевые байты. Объекты Unicode преобразуются в строки C с использованием кодировки'utf-8'. -
z (str or None) [const char *] -
Как
s, но объект Python также может бытьNone; в этом случае указателю C присваивается значениеNULL. -
z* (str, bytes-like object or None) [Py_buffer] -
Как
s*, но объект Python также может бытьNone; в этом случае членуbufструктурыPy_bufferприсваивается значениеNULL. -
z# (str, read-only bytes-like object or None) [const char *, Py_ssize_t] -
Как
s#, но объект Python также может бытьNone; в этом случае указателю C присваивается значениеNULL. -
y (read-only bytes-like object) [const char *] -
Этот формат преобразует объект, подобный bytes, в указатель C на символьную строку, заимствованную из объекта; объекты Unicode не принимаются. Буфер bytes не должен содержать встроенных нулевых байтов; в противном случае возникает исключение
ValueError.Изменено в версии 3.5: Ранее при обнаружении встроенных нулевых байтов в буфере bytes возникало исключение
TypeError. -
y* (bytes-like object) [Py_buffer] -
Этот вариант
s*не принимает объекты Unicode, только объекты, подобные bytes. Это рекомендуемый способ принимать двоичные данные. -
y# (read-only bytes-like object) [const char *, Py_ssize_t] -
Этот вариант
s#не принимает объекты Unicode, только объекты, подобные bytes. -
S (bytes) [PyBytesObject *] -
Требует, чтобы объект Python был объектом
bytes; преобразование не выполняется. Если объект не является объектом bytes, возникает исключениеTypeError. Переменная C также может быть объявлена как PyObject*. -
Y (bytearray) [PyByteArrayObject *] -
Требует, чтобы объект Python был объектом
bytearray; преобразование не выполняется. Если объект не является объектомbytearray, возникает исключениеTypeError. Переменная C также может быть объявлена как PyObject*. -
U (str) [PyObject *] -
Требует, чтобы объект Python был объектом Unicode; преобразование не выполняется. Если объект не является объектом Unicode, возникает исключение
TypeError. Переменная C также может быть объявлена как PyObject*. -
w* (read-write bytes-like object) [Py_buffer] -
Этот формат принимает любой объект, реализующий интерфейс буфера для чтения и записи. Он заполняет предоставленную вызывающим кодом структуру
Py_buffer. Буфер может содержать встроенные нулевые байты. Когда работа с буфером завершена, вызывающий код должен вызватьPyBuffer_Release(). -
es (str) [const char *encoding, char **buffer] -
Этот вариант
sиспользуется для кодирования Unicode в символьный буфер. Он работает только с кодированными данными, не содержащими встроенных байтов NUL.Для этого формата требуются два аргумента. Первый используется только как входной и должен иметь тип const char* и указывать на имя кодировки в виде строки, завершающейся нулевым символом NUL, либо быть равен
NULL; в последнем случае используется кодировка'utf-8'. Если Python не знает указанную кодировку, возникает исключение. Второй аргумент должен иметь тип char**; значение указателя, на который он ссылается, будет установлено на буфер с содержимым текста аргумента. Текст будет закодирован в кодировке, указанной первым аргументом.PyArg_ParseTuple()выделит буфер необходимого размера, скопирует в него закодированные данные и установит *buffer так, чтобы он указывал на вновь выделенную область памяти. Вызывающий код отвечает за вызовPyMem_Free()для освобождения выделенного буфера после использования. -
et (str, bytes or bytearray) [const char *encoding, char **buffer] -
То же, что и
es, за исключением того, что объекты байтовых строк передаются без повторного кодирования. Вместо этого реализация предполагает, что объект байтовой строки использует кодировку, переданную в качестве параметра. -
es# (str) [const char *encoding, char **buffer, Py_ssize_t *buffer_length] -
Этот вариант
s#используется для кодирования Unicode в символьный буфер. В отличие от форматаes, этот вариант допускает входные данные, содержащие символы NUL.Для него требуются три аргумента. Первый используется только как входной и должен иметь тип const char* и указывать на имя кодировки в виде строки, завершающейся нулевым символом NUL, либо быть равен
NULL; в последнем случае используется кодировка'utf-8'. Если Python не знает указанную кодировку, возникает исключение. Второй аргумент должен иметь тип char**; значение указателя, на который он ссылается, будет установлено на буфер с содержимым текста аргумента. Текст будет закодирован в кодировке, указанной первым аргументом. Третий аргумент должен быть указателем на целое число; значение этого целого числа будет установлено равным количеству байтов в выходном буфере.Возможны два режима работы:
Если *buffer указывает на указатель
NULL, функция выделит буфер необходимого размера, скопирует в него закодированные данные и установит *buffer так, чтобы он указывал на вновь выделенную область памяти. Вызывающий код отвечает за вызовPyMem_Free()для освобождения выделенного буфера после использования.Если *buffer указывает на указатель, отличный от
NULL(уже выделенный буфер),PyArg_ParseTuple()использует эту область в качестве буфера и интерпретирует начальное значение *buffer_length как размер буфера. Затем функция скопирует закодированные данные в буфер и завершит их нулевым символом NUL. Если буфер недостаточно велик, будет установлено исключениеValueError.В обоих случаях значение *buffer_length устанавливается равным длине закодированных данных без завершающего байта NUL.
-
et# (str, bytes or bytearray) [const char *encoding, char **buffer, Py_ssize_t *buffer_length] -
То же, что и
es#, за исключением того, что объекты байтовых строк передаются без повторного кодирования. Вместо этого реализация предполагает, что объект байтовой строки использует кодировку, переданную в качестве параметра.
Изменено в версии 3.12: Форматы u, u#, Z и Z# удалены, поскольку они использовали устаревшее представление Py_UNICODE*.
Числа
Эти форматы позволяют представлять числа Python или отдельные символы в виде чисел C. В форматах, которым требуются int, float или complex, также можно использовать соответствующие специальные методы __index__(), __float__() или __complex__() для преобразования объекта Python к требуемому типу.
Для форматов знаковых целых чисел, если значение выходит за пределы диапазона типа C, возникает исключение OverflowError. Для форматов беззнаковых целых чисел проверка диапазона не выполняется: наиболее значимые биты отбрасываются без предупреждения, если принимающее поле недостаточно велико для размещения значения.
-
b (int) [unsigned char] -
Преобразует неотрицательное целое число Python в беззнаковое крошечное целое число, хранящееся в C-переменной типа unsigned char.
-
B (int) [unsigned char] -
Преобразует целое число Python в крошечное целое число без проверки переполнения, хранящееся в C-переменной типа unsigned char.
-
h (int) [short int] -
Преобразует целое число Python в целое число C типа short int.
-
H (int) [unsigned short int] -
Преобразует целое число Python в беззнаковое целое число C типа unsigned short int без проверки переполнения.
-
i (int) [int] -
Преобразует целое число Python в обычное целое число C типа int.
-
I (int) [unsigned int] -
Преобразует целое число Python в беззнаковое целое число C типа unsigned int без проверки переполнения.
-
l (int) [long int] -
Преобразует целое число Python в целое число C типа long int.
-
k (int) [unsigned long] -
Преобразует целое число Python в беззнаковое целое число C типа unsigned long без проверки переполнения.
-
L (int) [long long] -
Преобразует целое число Python в целое число C типа long long.
-
K (int) [unsigned long long] -
Преобразует целое число Python в беззнаковое целое число C типа unsigned long long без проверки переполнения.
-
n (int) [Py_ssize_t] -
Преобразует целое число Python в
Py_ssize_tтипа C. -
c (bytes or bytearray of length 1) [char] -
Преобразует байт Python, представленный объектом
bytesилиbytearrayдлиной 1, в значение типа C char.Изменено в версии 3.3: Добавлена поддержка объектов
bytearray. -
C (str of length 1) [int] -
Преобразует символ Python, представленный объектом
strдлиной 1, в целое число C типа int. -
f (float) [float] -
Преобразует число с плавающей точкой Python в число C типа float.
-
d (float) [double] -
Преобразует число с плавающей точкой Python в число C типа double.
-
D (complex) [Py_complex] -
Преобразует комплексное число Python в структуру C
Py_complex.
Другие объекты
-
O (object) [PyObject *] -
Сохраняет объект Python (без какого-либо преобразования) в указатель на объект C. Таким образом программа на C получает именно тот объект, который был передан. Новая сильная ссылка на объект не создаётся (то есть его счётчик ссылок не увеличивается). Сохранённый указатель не равен
NULL. -
O! (object) [typeobject, PyObject *] -
Сохраняет объект Python в указатель на объект C. Это похоже на
O, но принимает два аргумента C: первый — адрес объекта типа Python, второй — адрес переменной C (типа PyObject*), в которую сохраняется указатель на объект. Если объект Python не имеет требуемого типа, возникает исключениеTypeError.
-
O& (object) [converter, address] -
Преобразует объект Python в переменную C с помощью функции преобразователя. Принимает два аргумента: первый — функция, второй — адрес переменной C (произвольного типа), преобразуемый в void*. Затем функция преобразователя вызывается следующим образом:
status = converter(object, address);
где object — объект Python, который нужно преобразовать, а address — аргумент типа void*, переданный функции
PyArg_Parse*. Для успешного преобразования возвращаемое значение status должно быть равно1, а при неудачном преобразовании —0. При неудачном преобразовании функция преобразователя должна вызвать исключение и оставить содержимое address без изменений.Если преобразователь возвращает
Py_CLEANUP_SUPPORTED, он может быть вызван второй раз, если разбор аргументов в итоге завершится неудачей. Это даёт преобразователю возможность освободить уже выделенную память. При втором вызове параметр object будет равенNULL; значение address будет таким же, как при первом вызове.Примеры преобразователей:
PyUnicode_FSConverter()иPyUnicode_FSDecoder().Изменено в версии 3.1: Добавлен
Py_CLEANUP_SUPPORTED. -
p (bool) [int] -
Проверяет переданное значение на истинность (логический предикат) и преобразует результат в эквивалентное целочисленное значение C true/false. Устанавливает для int значение
1, если выражение истинно, и0, если оно ложно. Принимает любое допустимое значение Python. Подробнее о том, как Python проверяет истинность значений, см. в разделе Проверка истинности значения.Добавлено в версии 3.3.
-
(items) (tuple) [matching-items] -
Объект должен быть последовательностью Python, длина которой равна количеству единиц формата в items. Аргументы C должны соответствовать отдельным единицам формата в items. Единицы формата для последовательностей могут быть вложенными.
Некоторые другие символы в строке формата также имеют специальное значение. Они не могут встречаться внутри вложенных круглых скобок. Это:
-
| -
Указывает, что оставшиеся аргументы в списке аргументов Python являются необязательными. Переменным C, соответствующим необязательным аргументам, следует присвоить значения по умолчанию: если необязательный аргумент не указан,
PyArg_ParseTuple()не изменяет содержимое соответствующей переменной (переменных) C. -
$ -
Только для
PyArg_ParseTupleAndKeywords(): указывает, что оставшиеся аргументы в списке аргументов Python должны передаваться только по ключевым словам. В настоящее время все аргументы, передаваемые только по ключевым словам, также должны быть необязательными, поэтому в строке формата|всегда должен указываться перед$.Добавлено в версии 3.3.
-
: -
Список единиц формата заканчивается здесь; строка после двоеточия используется как имя функции в сообщениях об ошибках («связанное значение» исключения, которое вызывает
PyArg_ParseTuple()). -
; -
Список единиц формата заканчивается здесь; строка после точки с запятой используется вместо сообщения об ошибке по умолчанию.
:и;взаимоисключают друг друга.
Обратите внимание, что любые ссылки на объекты Python, переданные вызывающему коду, являются заимствованными; не освобождайте их (то есть не уменьшайте их счётчик ссылок)!
Дополнительные аргументы, передаваемые этим функциям, должны быть адресами переменных, тип которых определяется строкой формата; они используются для сохранения значений из входного кортежа. В нескольких случаях, описанных выше в списке единиц формата, эти параметры используются как входные значения; в таких случаях они должны соответствовать требованиям, указанным для соответствующей единицы формата.
Для успешного преобразования объект arg должен соответствовать формату, а формат должен быть исчерпан. В случае успеха функции PyArg_Parse* возвращают true; в противном случае они возвращают false и вызывают соответствующее исключение. Если функции PyArg_Parse* завершаются с ошибкой из-за неудачного преобразования одной из единиц формата, переменные по адресам, соответствующим этой и последующим единицам формата, остаются без изменений.
Функции API
-
int PyArg_ParseTuple(PyObject *args, const char *format, ...) -
Входит в стабильный ABI.
Разбирает параметры функции, принимающей только позиционные параметры, и помещает их в локальные переменные. Возвращает true в случае успеха; при ошибке возвращает false и вызывает соответствующее исключение.
-
int PyArg_VaParse(PyObject *args, const char *format, va_list vargs) -
Входит в стабильный ABI.
Идентична
PyArg_ParseTuple(), за исключением того, что принимает va_list вместо переменного числа аргументов.
-
int PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *const *keywords, ...) -
Входит в стабильный ABI.
Разбирает параметры функции, принимающей позиционные и именованные параметры, и помещает их в локальные переменные. Аргумент keywords — это завершающийся
NULLмассив имён именованных параметров, заданных в виде завершающихся нулевым символом строк C в кодировке ASCII или UTF-8. Пустые имена обозначают только позиционные параметры. Возвращает true в случае успеха; при ошибке возвращает false и вызывает соответствующее исключение.Примечание
Объявление параметра keywords имеет тип char *const* в C и const char *const* в C++. Это можно переопределить с помощью макроса
PY_CXX_CONST.Изменено в версии 3.6: Добавлена поддержка только позиционных параметров.
Изменено в версии 3.13: Теперь параметр keywords имеет тип char *const* в C и const char *const* в C++, а не char**. Добавлена поддержка имён именованных параметров, содержащих символы не ASCII.
-
int PyArg_VaParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *const *keywords, va_list vargs) -
Входит в стабильный ABI.
Идентична
PyArg_ParseTupleAndKeywords(), за исключением того, что принимает va_list вместо переменного числа аргументов.
-
int PyArg_ValidateKeywordArguments(PyObject*) -
Входит в стабильный ABI.
Проверяет, что ключи в словаре аргумента keywords являются строками. Это нужно только в том случае, если не используется
PyArg_ParseTupleAndKeywords(), поскольку последняя уже выполняет эту проверку.Добавлено в версии 3.2.
-
int PyArg_Parse(PyObject *args, const char *format, ...) -
Входит в стабильный ABI.
Разбирает параметр функции, принимающей один позиционный параметр, и помещает его в локальную переменную. Возвращает true в случае успеха; при ошибке возвращает false и вызывает соответствующее исключение.
Пример:
// Function using METH_O calling convention static PyObject* my_function(PyObject *module, PyObject *arg) { int value; if (!PyArg_Parse(arg, "i:my_function", &value)) { return NULL; } // ... use value ... }
-
int PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...) -
Входит в стабильный ABI.
Упрощённый способ получения параметров, не использующий строку формата для указания типов аргументов. Функции, получающие параметры этим способом, должны быть объявлены как
METH_VARARGSв таблицах функций или методов. Кортеж с фактическими параметрами следует передать как args; он действительно должен быть кортежем. Длина кортежа должна быть не меньше min и не больше max; значения min и max могут совпадать. Функции также нужно передать дополнительные аргументы, каждый из которых должен быть указателем на переменную типа PyObject*; эти переменные будут заполнены значениями из args и будут содержать заимствованные ссылки. Переменные, соответствующие необязательным параметрам, не переданным в args, заполнены не будут; вызывающий код должен инициализировать их самостоятельно. Функция возвращает true в случае успеха и false, если args не является кортежем или содержит неверное число элементов; в случае ошибки устанавливается исключение.Ниже приведён пример использования этой функции, взятый из исходного кода вспомогательного модуля
_weakrefдля слабых ссылок:static PyObject * weakref_ref(PyObject *self, PyObject *args) { PyObject *object; PyObject *callback = NULL; PyObject *result = NULL; if (PyArg_UnpackTuple(args, "ref", 1, 2, &object, &callback)) { result = PyWeakref_NewRef(object, callback); } return result; }Вызов
PyArg_UnpackTuple()в этом примере полностью эквивалентен следующему вызовуPyArg_ParseTuple():PyArg_ParseTuple(args, "O|O:ref", &object, &callback)
-
PY_CXX_CONST -
Значение, которое при необходимости вставляется перед char *const* в объявлении параметра keywords функций
PyArg_ParseTupleAndKeywords()иPyArg_VaParseTupleAndKeywords(). По умолчанию для C это пустое значение, а для C++ —const(const char *const*). Чтобы переопределить его, задайте нужное значение перед включениемPython.h.Добавлено в версии 3.13.
Создание значений
-
PyObject *Py_BuildValue(const char *format, ...) -
Возвращаемое значение: новая ссылка. Входит в стабильный ABI.
Создаёт новое значение на основе строки формата, подобной строкам, принимаемым семейством функций
PyArg_Parse*, и последовательности значений. Возвращает значение илиNULLв случае ошибки; если возвращеноNULL, будет вызвано исключение.Py_BuildValue()не всегда создаёт кортеж. Кортеж создаётся, только если строка формата содержит две или более единицы формата. Если строка формата пуста, возвращаетсяNone; если она содержит ровно одну единицу формата, возвращается объект, описанный этой единицей формата. Чтобы принудительно вернуть кортеж из 0 или 1 элемента, заключите строку формата в круглые скобки.Когда буферы памяти передаются в качестве параметров для предоставления данных, из которых создаются объекты, как в случае форматов
sиs#, необходимые данные копируются. Буферы, предоставленные вызывающим кодом, никогда не используются в качестве ссылок объектами, созданными функциейPy_BuildValue(). Другими словами, если ваш код вызываетmalloc()и передаёт выделенную память функцииPy_BuildValue(), ваш код должен вызватьfree()для этой памяти после возвратаPy_BuildValue().В приведённом ниже описании текст в кавычках — это единица формата; запись в круглых скобках — тип объекта Python, возвращаемого этой единицей формата; запись в квадратных скобках — тип передаваемого значения или значений C.
Пробелы, табуляции, двоеточия и запятые в строках формата игнорируются (но не внутри единиц формата, таких как
s#). Это можно использовать, чтобы сделать длинные строки формата немного более удобными для чтения.-
s (str or None) [const char *] -
Преобразует завершающуюся нулевым символом строку C в объект Python
strс помощью кодировки'utf-8'. Если указатель на строку C равенNULL, используетсяNone. -
s# (str or None) [const char *, Py_ssize_t] -
Преобразует строку C и её длину в объект Python
strс помощью кодировки'utf-8'. Если указатель на строку C равенNULL, длина игнорируется и возвращаетсяNone. -
y (bytes) [const char *] -
Преобразует строку C в объект Python
bytes. Если указатель на строку C равенNULL, возвращаетсяNone. -
y# (bytes) [const char *, Py_ssize_t] -
Преобразует строку C и её длину в объект Python. Если указатель на строку C равен
NULL, возвращаетсяNone. -
z (str or None) [const char *] -
То же, что и
s. -
z# (str or None) [const char *, Py_ssize_t] -
То же, что и
s#. -
u (str) [const wchar_t *] -
Преобразует завершающийся нулевым символом буфер
wchar_tс данными Unicode (UTF-16 или UCS-4) в объект Unicode Python. Если указатель на буфер Unicode равенNULL, возвращаетсяNone. -
u# (str) [const wchar_t *, Py_ssize_t] -
Преобразует буфер данных Unicode (UTF-16 или UCS-4) и его длину в объект Unicode Python. Если указатель на буфер Unicode равен
NULL, длина игнорируется и возвращаетсяNone. -
U (str or None) [const char *] -
То же, что и
s. -
U# (str or None) [const char *, Py_ssize_t] -
То же, что и
s#. -
i (int) [int] -
Преобразует обычное значение C типа int в целочисленный объект Python.
-
b (int) [char] -
Преобразует обычное значение C типа char в целочисленный объект Python.
-
h (int) [short int] -
Преобразует обычное значение C типа short int в целочисленный объект Python.
-
l (int) [long int] -
Преобразует значение C типа long int в целочисленный объект Python.
-
B (int) [unsigned char] -
Преобразует значение C типа unsigned char в целочисленный объект Python.
-
H (int) [unsigned short int] -
Преобразует значение C типа unsigned short int в целочисленный объект Python.
-
I (int) [unsigned int] -
Преобразует значение C типа unsigned int в целочисленный объект Python.
-
k (int) [unsigned long] -
Преобразует значение C типа unsigned long в целочисленный объект Python.
-
L (int) [long long] -
Преобразует значение C типа long long в целочисленный объект Python.
-
K (int) [unsigned long long] -
Преобразует значение C типа unsigned long long в целочисленный объект Python.
-
n (int) [Py_ssize_t] -
Преобразует значение C типа
Py_ssize_tв целое число Python. -
c (bytes of length 1) [char] -
Преобразует значение C типа int, представляющее байт, в объект Python
bytesдлиной 1. -
C (str of length 1) [int] -
Преобразует значение C типа int, представляющее символ, в объект Python
strдлиной 1. -
d (float) [double] -
Преобразует значение C типа double в число с плавающей точкой Python.
-
f (float) [float] -
Преобразует значение C типа float в число с плавающей точкой Python.
-
D (complex) [Py_complex *] -
Преобразует структуру C
Py_complexв комплексное число Python. -
O (object) [PyObject *] -
Передаёт объект Python без изменений, но создаёт на него новую сильную ссылку (то есть счётчик ссылок увеличивается на единицу). Если переданный объект — указатель
NULL, предполагается, что это произошло из-за того, что вызов, сформировавший аргумент, обнаружил ошибку и установил исключение. Поэтому функцияPy_BuildValue()вернётNULL, но не вызовет исключение. Если исключение ещё не было вызвано, устанавливаетсяSystemError. -
S (object) [PyObject *] -
То же, что и
O. -
N (object) [PyObject *] -
То же, что и
O, но без создания новой сильной ссылки. Полезно, если объект создаётся вызовом конструктора объекта в списке аргументов. -
O& (object) [converter, anything] -
Преобразует что угодно в объект Python с помощью функции преобразователя. Функция вызывается с аргументом что угодно (который должен быть совместим с типом void*) и должна вернуть «новый» объект Python или
NULLв случае ошибки. -
(items) (tuple) [matching-items] -
Преобразует последовательность значений C в кортеж Python с таким же числом элементов.
-
[items] (list) [matching-items] -
Преобразует последовательность значений C в список Python с таким же числом элементов.
-
{items} (dict) [matching-items] -
Преобразует последовательность значений C в словарь Python. Каждая пара последовательных значений C добавляет в словарь один элемент: первое значение становится ключом, второе — значением.
Если в строке формата обнаружена ошибка, устанавливается исключение
SystemErrorи возвращаетсяNULL. -
-
PyObject *Py_VaBuildValue(const char *format, va_list vargs) -
Возвращаемое значение: новая ссылка. Входит в стабильный ABI.
Идентична
Py_BuildValue(), за исключением того, что принимает va_list вместо переменного числа аргументов.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/arg.html