Cython - 将可变数量的参数从Python传递到C省略号

时间:2017-01-16 19:24:53

标签: python c cython

我试图使用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, 31, 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函数?

0 个答案:

没有答案