这是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
块?
答案 0 :(得分:2)
原因是Python与C / C ++中的范围规则。
Cython正试图让Python和C / C ++世界变得更好。但这两个世界之间存在一些不相容之处。范围规则是一个。
为了修补这两个规则,Cython开发人员决定只允许在函数开头使用局部变量声明。