PyObject *Py_BuildValue(const char *format, ...)
返回值:新的引用。 属于 稳定 ABI.
基于类似 PyArg_Parse* 函数族所接受内容的格式字符串和一个值序列来创建一个新值。 返回该值或在发生错误的情况下返回 NULL;如果返回 NULL 则将引发一个异常。
Py_BuildValue() 并不一直创建一个元组。只有当它的格式化字符串包含两个或更多的格式单元才会创建一个元组。如果格式化字符串是空,它返回 None;如果它包含一个格式单元,它返回由格式单元描述的的任一对象。用圆括号包裹格式化字符串可以强制它返回一个大小为 0 或者 1 的元组。
当内存缓存区的数据以参数形式传递用来构建对象时,如 s 和 s# 格式单元,会拷贝需要的数据。调用者提供的缓冲区从来都不会被由 Py_BuildValue() 创建的对象来引用。换句话说,如果你的代码调用 malloc() 并且将分配的内存空间传递给 Py_BuildValue(),你的代码就有责任在 Py_BuildValue() 返回时调用 free() 。
在下面的描述中,双引号的表达式使格式单元;圆括号 () 内的是格式单元将要返回的 Python 对象类型;方括号 [] 内的是传递的 C 变量(变量集)的类型。
字符例如空格,制表符,冒号和逗号在格式化字符串中会被忽略(但是不包括格式单元,如 s#)。这可以使很长的格式化字符串具有更好的可读性。
s (str 或 None) [const char *]
使用 'utf-8' 编码将空终止的 C 字符串转换为 Python str 对象。如果 C 字符串指针为 NULL,则使用 None。
s# (str 或 None) [const char *, Py_ssize_t]
使用 'utf-8' 编码将 C 字符串及其长度转换为 Python str 对象。如果 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 或 None) [const char *, Py_ssize_t]
和 s# 一样。
u (str) [const wchar_t *]
将空终止的 wchar_t 的 Unicode (UTF-16 或 UCS-4) 数据缓冲区转换为 Python Unicode 对象。 如果 Unicode 缓冲区指针为 NULL,则返回 None。
u# (str) [const wchar_t *, Py_ssize_t]
将 Unicode (UTF-16 或 UCS-4) 数据缓冲区及其长度转换为 Python Unicode 对象。 如果 Unicode 缓冲区指针为 NULL,则长度将被忽略,并返回 None。
U (str 或 None) [const char *]
和 s 一样。
U# (str 或 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 长度为1 ) [char]
将一个代表单个字节的 C int 转换为长度为 1 的 Python bytes 对象。
C (str 长度为 1) [int]
将一个代表单个字符的 C int 转换为长度为 1 的 Python str 对象。
d (float) [double]
将一个 C double 转换为 Python 浮点数。
f (float) [float]
将一个 C float 转换为 Python 浮点数。
D (complex) [Py_complex *]
将一个 C Py_complex 类型的结构转化为 Python 复数类型。
O (object) [PyObject *]
原封不动地传递一个 Python 对象,但为其创建一个新的 strong reference (即其引用计数加一)。 如果传入的对象是一个 NULL 指针,则会假定这是因为产生该参数的调用发现了错误并设置了异常。 因此,Py_BuildValue() 将返回 NULL 但不会引发异常。 如果尚未引发异常,则会设置 SystemError。
S (object) [PyObject *]
和 O 相同。
N (object) [PyObject *]
与 O 相同,但它不会创建新的 strong reference。 如果对象是通过调用参数列表中的对象构造器来创建的则该方法将很有用处。
O& (object) [converter, anything]
通过 converter 函数将 anything 转换为 Python 对象。 该函数在调用时附带 anything (它应当兼容 void*) 作为其参数并且应返回一个 "新的" Python 对象,或者如果发生错误则返回 NULL。
(items) (tuple) [matching-items]
将一个 C 变量序列转换成 Python 元组并保持相同的元素数量。
[items] (list) [相关的元素]
将一个 C 变量序列转换成 Python 列表并保持相同的元素数量。
{items} (dict) [相关的元素]
将一个C变量序列转换成 Python 字典。每一对连续的 C 变量对作为一个元素插入字典中,分别作为关键字和值。
如果格式字符串中出现错误,则设置 SystemError 异常并返回 NULL。
PyObject *Py_VaBuildValue(const char *format, va_list vargs)
返回值:新的引用。 属于 稳定 ABI.
和 Py_BuildValue() 相同,然而它接受一个 va_list 类型的参数而不是可变数量的参数集。 |