【发布时间】:2015-07-26 17:12:24
【问题描述】:
在阅读有关课程的 Cython 文档后有一个基本问题,但我想弄清楚。以下是来自Cython documentation 的示例代码:
cdef class Rectangle:
cdef int x0, y0
cdef int x1, y1
def __init__(self, int x0, int y0, int x1, int y1):
self.x0 = x0; self.y0 = y0; self.x1 = x1; self.y1 = y1
cpdef int area(self):
cdef int area
area = (self.x1 - self.x0) * (self.y1 - self.y0)
if area < 0:
area = -area
return area
为什么__init__ 前面是def 而不是cdef 或cpdef?
我知道有一个__cinit__ 函数,但不应该让cpdef __init__ 让__init__ 代码更快吗?
或者,我们是否应该将需要快速运行的代码放在__cinit__ 部分,将我们可以负担得起运行速度较慢的代码放在__init__ 部分?
【问题讨论】:
-
__init__和__cinit__是对象的构造函数。在一个设计良好的程序中,您通常在构造函数中没有任何时间关键计算。__cinit__和__init__也不等同。如果您必须初始化对象的c部分(例如malloc),那么这发生在__cinit__中,而正常的python 初始化发生在__init__ -
我明白这一点(这也在文档中)。我想问的是为什么代码使用
def __init__而不是说cpdef __init__ -
我不确定
cpdef __init__是否有效。除此之外 - 我看不出这样做的理由。为什么你更喜欢cpdef?
标签: cython