【问题标题】:Pass a list or tuple of arbitrary length to Python extension written in C [duplicate]将任意长度的列表或元组传递给用 C 编写的 Python 扩展 [重复]
【发布时间】:2018-07-17 17:04:38
【问题描述】:

如果我在 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 是数组中元素的数量。这可能吗?

【问题讨论】:

    标签: python c


    【解决方案1】:

    详细解释请参考这个帖子,但这被标记为重复

    Python extension module with variable number of arguments

    【讨论】:

    • 您只是复制粘贴答案。这不酷
    • 我标记为重复但我不知道从另一个线程中提取最佳答案不是一个好习惯。我已更正,并将删除此
    • 我知道我可以手动解析args,但是这个解决方案假设传递给 bar 的唯一东西是任意长度的元组。当函数有多个参数时会发生什么?当有关键字参数时,通常由PyArg_ParseTupleAndKeywords处理怎么办?
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多