当我声明一个函数时,我想知道defcdefcpdef之间的区别。
def和其他之间的区别或多或少很明显。
而且我还看到,有时在声明(cdef void/double/int... name)中添加了返回类型,有时则没有。

我还想知道如何在cython中声明一个字符串变量,因为我不知道,我将其声明为对象。

最佳答案

def在Python中声明一个函数。由于Cython基于C运行时,因此您可以使用cdefcpdef
cdef在C语言层中声明函数。如您所知(或不?),您必须使用C语言定义每个函数的返回值类型。有时函数返回void,这与Python中的return相等。

Python是一种面向对象的语言。因此,您还可以在C++语言层中定义类方法,并在子类中覆盖此方法:

cdef class A:
    cdef foo(self):
        print "A"

cdef class B(A)
    cdef foo(self, x=None)
        print "B", x

cdef class C(B):
    cpdef foo(self, x=True, int k=3)
        print "C", x, k

总结,为什么我们需要使用defcdefcpdef?因为如果您使用Cython,则在编译之前,您的Python代码将被转换为C代码。这样,您就可以控制生成的C代码列表。

有关更多信息,建议您阅读官方文档:http://docs.cython.org/src/reference/language_basics.html

10-01 01:40