python - 将任意长度的列表或元组传递给用 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 是数组中的元素个数。这可能吗?
解决方案
请参阅此线程以获取详细说明,但这已被标记为重复
推荐阅读
- bash - 为什么在 .bat 文件 (WSL) 中运行“bash”后终端会停止以及如何正确运行它?
- excel - 如何从即时窗口调用 Excel 自定义功能区按钮?
- aws-lambda - 当我在本地部署 aws lambda 时,console.log 输出在哪里?
- python - 如何用烧瓶测试和模拟 mongodb?
- javascript - nuxt js样式作用域我不知道如何更改另一个组件的样式
- intellij-idea - 修复 JetBrains IDE 图形错误,其中菜单窗口显示在多个显示器上
- postgresql - 无法连接到 postgresql 服务器 django lightail
- java - 为什么我可以使用 mvn spring-boot:run 启动我的应用程序,而 IntelliJ run 不起作用?
- javascript - 如何设置默认标头以解决 422 状态代码错误
- html - 在移动格式中,不显示 div,并且页脚比平时放置在上方