首页 > 解决方案 > 将任意长度的列表或元组传递给用 C 编写的 Python 扩展

问题描述

如果我在 C 中扩展 Python,我可以使用诸如PyArg_ParseTuple(). 但是,这只允许我指定标量参数或已知长度的元组参数。如何处理用户使用任意长度的元组从 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 是数组中的元素个数。这可能吗?

标签: pythonc

解决方案


请参阅此线程以获取详细说明,但这已被标记为重复

具有可变数量参数的 Python 扩展模块


推荐阅读