scope - 为什么 Cython 强制在函数开头声明局部变量

标签 scope local cython

这是在 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 block 中?

最佳答案

原因是 Python 与 C/C++ 中的作用域规则。

Cython 正在努力超越 Python 和 C/C++ 世界。但这两个世界之间存在一些不相容的地方。范围规则就是其中之一。

  • 在 C/C++ 中,局部变量的作用域是从它的声明点到声明它的最内部 block 的末尾。
  • 在 Python 中,如果变量被分配到函数中的某个位置,则该变量被视为函数中的局部变量。然后它就可以在函数内的任何地方使用。

为了修补这两条规则,Cython 开发人员决定仅允许在函数开头声明局部变量。

关于scope - 为什么 Cython 强制在函数开头声明局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21572718/

相关文章:

cython - 如何分发从 cython 生成的 .so 文件

python - 如何让pydev/eclipse在Windows平台上编译cython模块

javascript - 无法减少对象内部的数组

c++ - 如何从自己类的成员函数中访问公共(public)变量? (C++)

javascript - 访问函数内的变量::TypeScript & Angular2

java - 如何在同一 WebSphere Application Server 上安装的应用程序之间共享 EJB 本地接口(interface)?

arrays - 数组声明 : Global Vs Local

ffmpeg - 想要使用 ffmpeg 将视频从桌面发送到 Wowza

php - 更改 PHP 类函数的隐私范围

python - 我怎样才能使这个图像处理功能更快?已经尝试过Cython