这是在Cython - copy constructors中作为评论提出的。
以下代码没有在Cython中编译:
def bar(int i):
if i == 0:
return i
else:
cdef int j
j = i+1
return j然而,这一条完全正确:
def foo(int i):
cdef int j
if i == 0:
return i
else:
j = i+1
return j问题是:为什么Cython强制在函数的开头而不是在j块中声明else?
发布于 2014-02-05 09:03:51
原因是Python /C++中的范围规则。
Cython试图同时获得Python和C/C++世界的优势。但这两个世界之间存在着一些不相容之处。范围规则是其中之一。
为了修补这两个规则,Cython开发人员决定只允许在函数开始时声明局部变量。
https://stackoverflow.com/questions/21572718
复制相似问题