Обработка аргументов и построение значений
Эти функции полезны при создании собственных функций и методов расширений. Дополнительная информация и примеры доступны в Расширение и интеграция интерпретатора Python.
Первые три из этих описанных функций, PyArg_ParseTuple(), PyArg_ParseTupleAndKeywords() и PyArg_Parse(), все используют строки форматов, которые сообщают функции о ожидаемых аргументах. Строки форматов используют одинаковый синтаксис для каждой из этих функций.
Обработка аргументов
Строка формата состоит из нуля или более «единиц формата». Единица формата описывает один объект Python; обычно это один символ или скобочная последовательность единиц формата. За несколькими исключениями, единица формата, которая не является скобочной последовательностью, обычно соответствует одному аргументу адреса в этих функциях. В следующем описании, цитируемая форма — это единица формата; запись в (круглых) скобках — это тип объекта Python, который соответствует единице формата; и запись в [квадратных] скобках — это тип C-переменной(ых), адрес которой должен быть передан.
Строки и буферы
Примечание
В Python 3.12 и более ранних версиях макрос PY_SSIZE_T_CLEAN должен быть определён перед включением Python.h для использования всех # вариантов форматов (s#, y#, и т.д.), описанных ниже. Это не требуется в Python 3.13 и более поздних версиях.
Эти форматы позволяют обращаться к объекту как к непрерывному блоку памяти. Вам не нужно предоставлять объём памяти для возвращаемых unicode или bytes областей.
Если не указано иное, буферы не завершаются символом NULL.
Есть три способа преобразования строк и буферов в C:
- Форматы, такие как
y*иs*заполняют структуруPy_buffer. Это блокирует базовый буфер, так что вызывающая сторона может впоследствии использовать буфер даже внутри блокаPy_BEGIN_ALLOW_THREADSбез риска изменения размера или уничтожения изменяемых данных. В результате, необходимо вызватьPyBuffer_Release()после завершения обработки данных (или в любом случае преждевременного прерывания). - Форматы
es,es#,etиet#выделяют буфер результата. Необходимо вызватьPyMem_Free()после завершения обработки данных (или в любом случае преждевременного прерывания). -
Другие форматы принимают
strили только для чтения объект-подобный байтам, такой какbytes, и предоставляют указательconst char *на его буфер. В этом случае буфер «заимствуется»: он управляется соответствующим объектом Python и совмещает срок жизни этого объекта. Вам не придётся самостоятельно освобождать память.Чтобы гарантировать, что базовый буфер может быть безопасно заимствован, поле объекта
PyBufferProcs.bf_releasebufferдолжно бытьNULL. Это запрещает обычные изменяемые объекты, такие какbytearray, но также и некоторые объекты только для чтения, такие какmemoryviewобъектаbytes.Помимо этого требования
bf_releasebuffer, нет проверок, чтобы убедиться, что входной объект является неизменяемым (например, что он будет соблюдать запрос на доступ к изменяемому буферу или что другой поток не может изменить данные).
-
s (str) [const char *] -
Преобразовать объект Unicode в указатель C на строку символов. Указатель на существующую строку хранится в переменной указателя на символ, адрес которой вы передаёте. Строка C завершается нулём. Строка Python не должна содержать вложенных кодовых точек нуль; если она содержит, генерируется исключение
ValueError. Объекты Unicode преобразуются в строки C с использованием кодировки'utf-8'. Если это преобразование завершается неудачей, генерируется исключениеUnicodeError.Примечание
Этот формат не принимает объекты типа байты. Если вы хотите принимать пути к файлам и преобразовывать их в строки символов C, предпочтительнее использовать формат
O&сPyUnicode_FSConverter()в качестве конвертера.Изменено в версии 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, если объект не является объектом типа байты. Переменная C также может быть объявлена как PyObject*. -
Y (bytearray) [PyByteArrayObject *] -
Требуется, чтобы объект Python был объектом
bytearray, без попытки преобразования. Генерирует исключениеTypeError, если объект не является объектомbytearray. Переменная C также может быть объявлена как PyObject*. -
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, этот вариант позволяет использовать входные данные, содержащие нулевые символы.Он требует трех аргументов. Первый используется только в качестве входных данных и должен быть 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#за исключением того, что объекты строковых байтов пропускаются без их перекодирования. Вместо этого реализация предполагает, что строковый объект байтов использует кодировку, переданную в качестве параметра.
Изменено в версии 3.12: u, u#, Z, и Z# удалены, так как они использовали устаревшее представление Py_UNICODE*.
Числа
-
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. Устанавливает целое число в
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 *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 иconstдля C++ (const char *const*). Для переопределения, задайте нужное значение перед включениемPython.h.Добавлена в версии 3.13.
Значения построения
-
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-объект через функцию преобразования. Функция вызывается со значением anything (которое должно быть совместимо с 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/arg.html