Разбор аргументов и построение значений
Эти функции полезны при создании собственных функций и методов расширений. Дополнительная информация и примеры доступны в Расширение и встраивание интерпретатора Python.
Первые три из описанных функций, PyArg_ParseTuple(), PyArg_ParseTupleAndKeywords() и PyArg_Parse(), все используют строки формата, которые сообщают функции о ожидаемых аргументах. Строки формата используют одинаковый синтаксис для каждой из этих функций.
Разбор аргументов
Строка формата состоит из нуля или более «блоков формата». Блок формата описывает один объект Python; обычно это один символ или скобочная последовательность блоков формата. За несколькими исключениями, блок формата, который не является скобочной последовательностью, обычно соответствует одному аргументу адреса для этих функций. В следующем описании, скобочное представление — это блок формата; запись в круглых скобках — тип объекта Python, который соответствует блоку формата; а запись в квадратных скобках — тип переменной C, адрес которой должен быть передан.
Строки и буферы
Эти форматы позволяют получить доступ к объекту как к непрерывному блоку памяти. Вам не нужно предоставлять исходное хранилище для возвращаемой области unicode или bytes.
За исключением случаев, когда это оговаривается, буферы не завершаются символом NUL.
Существует три способа преобразования строк и буферов в C:
- Форматы, такие как
y*иs*заполняют структуруPy_buffer. Это блокирует базовый буфер, так что вызывающая сторона может впоследствии использовать буфер даже внутри блокаPy_BEGIN_ALLOW_THREADS, не рискуя изменением размера или уничтожением изменяемых данных. В результате, вам необходимо вызватьPyBuffer_Release()после завершения обработки данных (или в случае любого аварийного прерывания). - Форматы
es,es#,etиet#выделяют буфер результата. Вам необходимо вызватьPyMem_Free()после завершения обработки данных (или в случае любого аварийного прерывания). -
Другие форматы принимают
strили только для чтения объект типа bytes-like, напримерbytes, и предоставляют указательconst char *на его буфер. В этом случае буфер «заимствован»: он управляется соответствующим объектом Python и разделяет время жизни этого объекта. Вам не нужно будет самостоятельно освобождать память.Чтобы гарантировать, что базовый буфер может быть безопасно заимствован, поле объекта
PyBufferProcs.bf_releasebufferдолжно бытьNULL. Это исключает возможность использования обычных изменяемых объектов, таких какbytearray, но также и некоторых неизменяемых объектов, таких какmemoryviewтипаbytes.Помимо этого требования
bf_releasebuffer, нет проверок для подтверждения того, является ли входной объект неизменяемым (например, выполнит ли он запрос на создание изменяемого буфера или может ли другой поток изменить данные).
Примечание
Для всех # вариантов форматов (s#, y#, и т. д.), макрос PY_SSIZE_T_CLEAN должен быть определен до включения Python.h. В Python 3.9 и более ранних версиях тип аргумента длины — Py_ssize_t, если определен макрос PY_SSIZE_T_CLEAN, или int в противном случае.
-
s (str) [const char *] -
Преобразовать объект Unicode в указатель C на строку символов. Указатель на существующую строку сохраняется в переменной указателя символа, адрес которой вы передаёте. Строка C завершается нулём. Строка Python не должна содержать вложенных кодовых точек null; если они есть, возникает исключение
ValueError. Объекты Unicode преобразуются в строки C с использованием кодировки'utf-8'. Если это преобразование завершается неудачно, возникаетUnicodeError.Примечание
Этот формат не принимает объекты типа байты. Если вы хотите принимать пути к файлам и преобразовывать их в строки символов C, предпочтительнее использовать формат
O&сPyUnicode_FSConverter()в качестве конвертера.Изменено в версии 3.5: Ранее, при обнаружении вложенных кодовых точек null в строке Python, возникало исключение
TypeError. -
s* (str or bytes-like object) [Py_buffer] -
Этот формат принимает объекты Unicode, а также объекты типа байты. Он заполняет структуру
Py_buffer, предоставленную вызывающим приложением. В этом случае результирующая строка C может содержать вложенные нулевые байты. Объекты 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 *] -
Этот формат преобразует объект типа байты в указатель C на буфер для взятия в пользование строки символов; он не принимает объекты Unicode. Буфер байтов не должен содержать вложенных нулевых байтов; в противном случае возникает исключение
ValueError.Изменено в версии 3.5: Ранее, при обнаружении вложенных нулевых байтов в буфере байтов, возникало исключение
TypeError. -
y* (bytes-like object) [Py_buffer] -
Эта разновидность
s*не принимает объекты Unicode, только объекты типа байты. Это рекомендуемый способ принятия двоичных данных. -
y# (read-only bytes-like object) [const char *, Py_ssize_t] -
Эта разновидность
s#не принимает объекты Unicode, только объекты типа байты. -
S (bytes) [PyBytesObject *] -
Требует, чтобы объект Python был объектом
bytes, без попыток преобразования. ВызываетTypeError, если объект не является объектом bytes. Переменная C также может быть объявлена какPyObject*. -
Y (bytearray) [PyByteArrayObject *] -
Требует, чтобы объект Python был объектом
bytearray, без попыток преобразования. ВызываетTypeError, если объект не является объектомbytearray. Переменная C также может быть объявлена какPyObject*. -
u (str) [const Py_UNICODE *] -
Преобразует объект Python Unicode в указатель C на завершаемый нулём буфер символов Unicode. Вы должны передать адрес переменной указателя
Py_UNICODE, которая будет заполнена указателем на существующий буфер Unicode. Обратите внимание, что ширина символаPy_UNICODEзависит от параметров компиляции (она составляет либо 16, либо 32 бита). Строка Python не должна содержать вложенных кодовых точек null; если они есть, возникает исключениеValueError.Изменено в версии 3.5: Ранее, при обнаружении вложенных кодовых точек null в строке Python, возникало исключение
TypeError.Устаревшее начиная с версии 3.3, будет удалено в версии 3.12: Часть устаревшего API
Py_UNICODE; перейдите к использованиюPyUnicode_AsWideCharString(). -
u# (str) [const Py_UNICODE *, Py_ssize_t] -
Эта разновидность
uсохраняет значения в двух переменных C: первая — указатель на буфер данных Unicode, вторая — его длина. Эта разновидность позволяет использовать кодовые точки null.Устаревшее начиная с версии 3.3, будет удалено в версии 3.12: Часть устаревшего API
Py_UNICODE; перейдите к использованиюPyUnicode_AsWideCharString(). -
Z (str or None) [const Py_UNICODE *] -
Подобно
u, но объект Python также может бытьNone, в этом случае указательPy_UNICODEустанавливается вNULL.Устаревшее начиная с версии 3.3, будет удалено в версии 3.12: Часть устаревшего API
Py_UNICODE; перейдите к использованиюPyUnicode_AsWideCharString(). -
Z# (str or None) [const Py_UNICODE *, Py_ssize_t] -
Подобно
u#, но объект Python также может бытьNone, в этом случае указательPy_UNICODEустанавливается вNULL.Устаревшее начиная с версии 3.3, будет удалено в версии 3.12: Часть устаревшего API
Py_UNICODE; перейдите к использованиюPyUnicode_AsWideCharString(). -
U (str) [PyObject *] -
Требует, чтобы объект Python был объектом Unicode, без попыток преобразования. Вызывает
TypeError, если объект не является объектом Unicode. Переменная C также может быть объявлена какPyObject*. -
w* (read-write bytes-like object) [Py_buffer] -
Этот формат принимает любой объект, реализующий интерфейс буфера чтения-записи. Он заполняет структуру
Py_buffer, предоставленную вызывающим приложением. Буфер может содержать вложенные нулевые байты. Вызывающее приложение должно вызватьPyBuffer_Release(), когда закончит работу с буфером. -
es (str) [const char *encoding, char **buffer] -
Эта разновидность
sиспользуется для кодирования Unicode в буфер символов. Она работает только с закодированными данными без вложенных нулевых байтов.Этот формат требует два аргумента. Первый используется только как входной и должен быть
const char*, который указывает на имя кодировки в виде строки с завершающим нулём, или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*, указывающим на имя кодировки в виде строки с нулевым завершением илиNULL, в этом случае используется кодировка'utf-8'. Если указанной кодировки нет в Python, будет возбуждено исключение. Второй аргумент должен бытьchar**; значение указателя, на который он ссылается, будет установлено в буфер, содержащий содержимое входного текста. Текст будет закодирован в соответствии с кодировкой, указанной в первом аргументе. Третий аргумент должен быть указателем на целое число; ссылка на это целое число будет установлена в количество байтов в выходном буфере.Существует два режима работы:
Если *buffer указывает на
NULLуказатель, функция выделит буфер необходимого размера, скопирует закодированные данные в этот буфер и установит *buffer, чтобы он ссылался на вновь выделенное хранилище. Вызывающая сторона отвечает за вызовPyMem_Free()для освобождения выделенного буфера после использования.Если *buffer указывает на не-
NULLуказатель (уже выделенный буфер),PyArg_ParseTuple()будет использовать это местоположение как буфер и интерпретировать начальное значение *buffer_length как размер буфера. Затем он скопирует закодированные данные в буфер и завершит его нулевым байтом. Если буфер недостаточно велик, будет установленоValueError.В обоих случаях *buffer_length устанавливается в длину закодированных данных без заключительного нулевого байта.
-
et# (str, bytes or bytearray) [const char *encoding, char **buffer, Py_ssize_t *buffer_length] -
То же, что и
es#, за исключением того, что объекты байтовых строк передаются без перекодирования. Вместо этого реализация предполагает, что объект байтовой строки использует кодировку, переданную в качестве параметра.
Числа
-
b (int) [unsigned char] -
Преобразует неотрицательное целое число Python в целое без знака типа tiny int, хранящееся в C
unsigned char. -
B (int) [unsigned char] -
Преобразует целое число Python в tiny int без проверки переполнения, хранящееся в 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 в C
Py_ssize_t. -
c (bytes or bytearray of length 1) [char] -
Преобразует байт Python, представленный как объект
bytesилиbytearrayдлиной 1, в Cchar.Изменено в версии 3.3: Поддерживаются объекты
bytearray. -
C (str of length 1) [int] -
Преобразует символ Python, представленный как объект
strдлиной 1, в Cint. -
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, anything] -
Преобразует объект Python в C-переменную через функцию-конвертер. Она принимает два аргумента: первый — функцию, второй — адрес C-переменной (любого типа), преобразованной в
void*. Функция-конвертер, в свою очередь, вызывается следующим образом:status = converter(object, address);
где object — объект Python, который требуется преобразовать, а address —
void*аргумент, переданный функцииPyArg_Parse*. Возвращаемое значение status должно быть1для успешного преобразования и0в случае неудачи. При неудачном преобразовании функция-конвертер должна поднять исключение и оставить содержимое address неизменённым.Если конвертер возвращает
Py_CLEANUP_SUPPORTED, он может быть вызван во второй раз, если произойдёт ошибка в процессе парсинга аргументов, что даёт конвертеру возможность освободить ранее выделенную память. При этом втором вызове параметр object будетNULL; address будет иметь то же значение, что и при первом вызове.Изменено в версии 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. Элементы форматирования для последовательностей могут быть вложенными.
Возможна передача целых чисел большой длины (целые числа, значение которых превышает платформенную LONG_MAX), однако правильной проверки диапазона не выполняется — наиболее значимые биты безмолвно усекаются, когда получаемое поле слишком мало для приёма значения (фактически, семантика унаследована от приведений типов в C — результаты могут быть разными).
Несколько других символов имеют значение в строке форматирования. Они не могут встречаться внутри вложенных скобок.
-
| -
Указывает, что оставшиеся аргументы в списке аргументов 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 *keywords[], ...) -
Часть Стабильной ABI.
Разбирает параметры функции, принимающей как позиционные, так и ключевые параметры, в локальные переменные. Аргумент keywords представляет собой массив имён ключевых параметров, завершаемый значением
NULL. Пустые имена обозначают только позиционные параметры. Возвращает true при успехе; в случае неудачи возвращает false и вызывает соответствующее исключение.Изменено в версии 3.6: Добавлена поддержка только позиционных параметров.
-
int PyArg_VaParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *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.
Функция, используемая для деконструирования списков аргументов функций «старого стиля» — это функции, которые используют метод парсинга параметров
METH_OLDARGS, который был удалён в Python 3. Не рекомендуется использовать её для обработки параметров в новом коде, и большая часть кода стандартного интерпретатора была изменена, чтобы больше не использовать её для этой цели. Однако она остаётся удобным способом разложения других кортежей и может продолжать использоваться для этой цели.
-
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)
Значения для построения
-
PyObject *Py_BuildValue(const char *format, ...) -
Значение возврата: новая ссылка. Часть Стабильного API.
Создаёт новое значение на основе строки формата, подобной тем, что принимаются семейством функций
PyArg_Parse*, и последовательностью значений. Возвращает значение илиNULLв случае ошибки; исключение будет возбуждено, если возвращено значениеNULL.Py_BuildValue()не всегда строит кортеж. Он строит кортеж только в том случае, если его строка формата содержит две или более единицы формата. Если строка формата пустая, она возвращаетNone; если она содержит ровно одну единицу формата, она возвращает тот объект, который описывается этой единицей формата. Чтобы принудительно получить кортеж размера 0 или один, заключите строку формата в скобки.При передаче буферов памяти в качестве параметров для обеспечения данных для построения объектов, как для форматов
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 *] -
Преобразует буфер данных Юникода (UTF-16 или UCS-4) с нулевым завершением
wchar_tв объект Python Unicode. Если указатель на буфер Unicode равенNULL, возвращаетсяNone. -
u# (str) [const wchar_t *, Py_ssize_t] -
Преобразует буфер данных Юникода (UTF-16 или UCS-4) и его длину в объект Python Unicode. Если указатель на буфер 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, представляющий байт, в объект Pythonbytesдлиной 1. -
C (str of length 1) [int] -
Преобразует C
int, представляющий символ, в объект Pythonstrдлиной 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) -
Значение возврата: новая ссылка. Часть Стабильного API.
Идентично
Py_BuildValue(), за исключением того, что оно принимает va_list вместо переменного числа аргументов.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/arg.html