创建变量 ¶ Py_BuildValue | Py_VaBuildValue

发表于 : 2020-07-19   · CC BY-NC-SA 4.0 ·   3545 人浏览

PyObject Py_BuildValue(const char format, ...)
Return value: New reference.
基于类似于 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 *, int 或 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 *, int 或 Py_ssize_t]
这会将 C 字符串及其长度转换为一个 Python 对象。 如果该 C 字符串指针为 NULL,则返回 None。

z (str or None) [const char *]
s一样。

z# (str 或 None) [const char *, int 或 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 *, int 或 Py_ssize_t]
将 Unicode (UTF-16 或 UCS-4) 数据缓冲区及其长度转换为 Python Unicode 对象。 如果 Unicode 缓冲区指针为 NULL,则长度将被忽略,并返回 None。

U (str 或 None) [const char *]
s一样。

U# (str 或 None) [const char *, int 或 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 long 无符号短整型转化成Python整型对象。

I (int) [unsigned int]
将一个C unsigned long 无符号整型转化成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 整型代表的字符转化为Python bytes 长度为1的字节对象。

C (str 长度为1) [int]
将一个C int 整型代表的字符转化为Python str 长度为1的字符串对象。

d (float) [double]
将一个C double 双精度浮点数转化为Python浮点数类型数字。

f (float) [float]
将一个C float 单精度浮点数转化为Python浮点数类型数字。

D (复数) [Py_complex *]
将一个C Py_complex 类型的结构转化为Python复数类型。

O (object) [PyObject *]
将 Python 对象传递不变(其引用计数除外,该计数由 1 递增)。 如果传入的对象是 NULL 指针,则假定这是由于生成参数的调用发现错误并设置异常而引起的。因此,Py_BuildValue() 将返回 NULL,但不会引发异常。 如果尚未引发异常,则设置 SystemError。

S (object) [PyObject *]
O相同。

N (object) [PyObject *]
O相同,然而它并不增加对象的引用计数。当通过调用参数列表中的对象构造器创建对象时很实用。

O& (object) [converter, anything]
通过 converter 函数将 anything 转换为 Python 对象。 该函数以 anything (应与 void * 兼容)作为其参数,应返回 "new" 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)
Return value: New reference.
和 Py_BuildValue() 相同,然而它接受一个va_list类型的参数而不是可变数量的参数集。

Python python3 BuildValue 函数 Py_BuildValue Py_VaBuildValue