Обработка аргументов и построение значений
Эти функции полезны при создании собственных расширений функций и методов. Дополнительная информация и примеры доступны в Расширение и встраивание интерпретатора 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 завершается символом NUL. Строка Python не должна содержать вложенные нулевые символы; в противном случае возникает исключение
ValueError. Объекты Unicode преобразуются в строки C с использованием кодировки'utf-8'. Если это преобразование завершается неудачей, возникаетUnicodeError.Примечание
Этот формат не принимает объекты-подобные байтам. Если вы хотите принимать пути к файлам и преобразовывать их в строки символов C, предпочтительно использовать формат
O&сPyUnicode_FSConverter()в качестве converter.Изменено в версии 3.5: Ранее, когда в строке 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 не должна содержать вложенные нулевые кодовые точки; в противном случае возникает исключениеValueError.Изменено в версии 3.5: Ранее, когда в строке Python встречались вложенные нулевые кодовые точки, возникало исключение
TypeError.Устарело начиная с версии 3.3, будет удалено в версии 3.12: Часть старого стиля API
Py_UNICODE; пожалуйста, перейдите к использованиюPyUnicode_AsWideCharString(). -
u# (str) [const Py_UNICODE *, Py_ssize_t] -
Этот вариант
uсохраняет в двух переменных C: первой — указатель на буфер данных Unicode, второй — его длину. Этот вариант позволяет использовать нулевые кодовые точки.Устарело начиная с версии 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используется для кодирования Юникода в буфер символов. Он работает только для закодированных данных без вложенных байтов NUL.Этот формат требует два аргумента. Первый используется только как входной и должен быть 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#используется для кодирования Юникода в буфер символов. В отличие от формата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 в беззнаковое маленькое целое число, хранящееся в 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 в C
Py_ssize_t. -
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, 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, ...) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Создайте новое значение на основе строки формата, аналогичной тем, которые принимаются семейством функций
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 *] -
Преобразует буфер с нулевым завершением
wchar_tданных Юникода (UTF-16 или UCS-4) в объект Python Юникода. Если указатель буфера ЮникодаNULL, возвращаетсяNone. -
u# (str) [const wchar_t *, Py_ssize_t] -
Преобразует буфер данных Юникода (UTF-16 или UCS-4) и его длину в объект Python Юникода. Если указатель буфера Юникода
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] -
Преобразует последовательность C-значений в 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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/c-api/arg.html