我试图使用Cython来包装一个外部C库,它有几个使用省略号(...)作为签名一部分的函数。代码here提供了问题的部分解决方案。我的问题的相关部分是
cdef int foo(int n, ...):
// Print the variable number of arguments
def call_foo():
foo(1, 2, 3, 0)
foo(1, 2, 0)
这将输出1, 2, 3
和1, 2
,这是好的,就此而言。但是,我需要做的是通过Python传递变量参数。像
def call_foo(*args):
foo(args)
call_foo(1,0)
call_foo(1,2,3,4,0)
但是,虽然上面的代码将编译,但在执行时我得到一个TypeError:
File "cytest.pyx", line 31, in cytest.call_foo (cytest.cpp:915)
foo(args)
TypeError: an integer is required
另一种形式,
def call_foo(*args):
foo(args[0],args[1:])
call_foo(1,0)
call_foo(1,2,3,4,0)
导致编译错误:
cytest.pyx:30:24: Python object cannot be passed as a varargs parameter
有没有办法用Cython完成这个,还是我必须重写C函数?