目前,我正在尝试使用Cython,并希望能够完全用这种语言编写我的整个项目,但不幸的是,我遇到了相当大的问题。
我有一个C库,让我们称之为“lib.c”,我从中导入一个函数:
cdef extern from 'lib.c':
double compute(double params[7], double IN[2])
现在我想将这个函数分配给任意变量,这个变量不必从Python中访问:
K = compute
在Python中这并不是什么问题,但是在编译时我遇到了以下错误:
无法将 'double (double *, double *)' 转换为Python对象。
使用Cython函数包装C函数也行不通。例如,如果我执行以下操作:
cdef double _K_wrap(double params[7], double IN[2]):
return compute(params, IN)
K = _K_wrap
我遇到了同样的错误。
如何将C函数分配给Python / Cython变量的任何建议都将不胜感激。先提前致谢!
编辑:
好的,我刚刚尝试了hivert的建议:
ctypedef double (*Func)(double params[7], double IN[2])
cdef class FunctionHandler:
cdef Func K
def __cinit__(self, Func f):
self.K = f
def __call__(self, double params[7], double IN[2]):
return self.K(params, IN)
K = FunctionHandler(compute)
这导致相同的错误。可能我在__call__方法中做错了些什么。