cython多次回归

时间:2011-10-17 08:35:46

标签: 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);
         return (res, d)  

我想返回一个值列表,但是使用cdef它不起作用 它给了我erroe:AttributeError没有属性pyfoo 如果不使用cdef,我使用def或cpdef就可以了。

使用cdef在cython中有一些方法吗?

2 个答案:

答案 0 :(得分:7)

Python代码无法访问

cdef个函数。这就是为什么它们很快:从Python调用函数总是很慢。

解决方案正在使用cpdef,因此它可以从Python访问,并且在从C调用时可以快速访问。或者,不要从Python代码中调用它。

答案 1 :(得分:1)

问题似乎是cdef创建了一个带有C签名和C调用语义的函数。它们不能被Python调用。应该使用cpdef来提供围绕cdef函数的Python包装器。

这样看:cython正在提供C和python之间的桥梁。 cdef是桥的C端。 cpdef位于桥的Python端。

关于cython的讨论很好。