Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cython多重返回_Python_Cython - Fatal编程技术网

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的末尾。A
cpdef
位于两端;可以从Python调用,也可以从C调用fast。谢谢,我现在已经理解了。