当我声明一个函数时,我想知道def
,cdef
和cpdef
之间的区别。
def和其他之间的区别或多或少很明显。
而且我还看到,有时在声明(cdef void/double/int... name
)中添加了返回类型,有时则没有。
我还想知道如何在cython中声明一个字符串变量,因为我不知道,我将其声明为对象。
最佳答案
def
在Python中声明一个函数。由于Cython基于C运行时,因此您可以使用cdef
和cpdef
。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
总结,为什么我们需要使用
def
,cdef
和cpdef
?因为如果您使用Cython,则在编译之前,您的Python代码将被转换为C代码。这样,您就可以控制生成的C代码列表。有关更多信息,建议您阅读官方文档:http://docs.cython.org/src/reference/language_basics.html