将任意长度的列表或元组传递给用C

时间:2018-07-17 17:04:38

标签: python c

如果我要用C扩展Python,则可以使用PyArg_ParseTuple()之类的函数解析Python端提供的参数。但是,这仅允许我指定标量参数或已知长度的元组参数。我如何处理用户从Python调用具有任意长度的元组的函数的情况?例如:

import foo
foo.bar([1, 2, 3]) 
foo.bar([4, 5])

在这里,bar()在C中定义,并且其参数使用PyArg_ParseTuple()进行解析,该参数将参数值复制到局部变量中。我必须指定参数格式和将解析值复制到的地址。例如:

int i,j;
PyArg_ParseTuple(args, "i", &i)
/* or */
PyArg_ParseTuple(args, "(ii)", &i, &j);

但是我想要的是这样的:

int *i;
int ni;
PyArg_ParseTuple(args, "(i...)", &ni, i);

其中,i是一个数组,ni是该数组中元素的数量。这可能吗?

1 个答案:

答案 0 :(得分:0)

请参考该主题以获取详细说明,但这被标记为重复

Python extension module with variable number of arguments