Python cython多重返回
我想包装这个简单的函数:Python cython多重返回,python,cython,Python,Cython,我想包装这个简单的函数: double foo(int a, int* b) { double div = ((double) a) / ((double) *b); *b = a + (*b); return div; } 我想做的是: cdef pyfoo(int c, int d): res = foo(c, &d); retu
double foo(int a, int* b)
{
double div = ((double) a) / ((double) *b);
*b = a + (*b);
return div;
}
我想做的是:
cdef pyfoo(int c, int d):
res = foo(c, &d);
return (res, d)
我想返回一个值列表,但使用cdef它不起作用
它给了我一个错误:AttributeError无属性pyfoo
如果我使用def或cpdef代替cdef,它会工作
cython中是否有某种方法可以使用cdef实现这一点?Python代码无法访问cdef函数。这就是为什么它们很快:从Python调用函数总是很慢
解决方案是使用
cpdef
,这样它既可以从Python访问,也可以在从C调用时快速访问。或者,不要从Python代码调用它。问题似乎是cdef创建了一个具有C签名和C调用语义的函数。Python不能调用它们。cpdef应该用于为cdef函数提供Python包装器
这样看:cython提供了C和python之间的桥梁。cdef是桥的C端上的。cpdef位于桥的Python端
这是一个很好的话题。实际上,
def
位于Python的末尾。Acpdef
位于两端;可以从Python调用,也可以从C调用fast。谢谢,我现在已经理解了。