首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Cython在函数的开头强制声明局部变量

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

Stack Overflow用户
提问于 2014-02-05 09:03:51
回答 1查看 659关注 0票数 2

这是在Cython - copy constructors中作为评论提出的。

以下代码没有在Cython中编译:

代码语言:javascript
运行
复制
def bar(int i):
    if i == 0:
        return i
    else:
        cdef int j
        j = i+1
        return j

然而,这一条完全正确:

代码语言:javascript
运行
复制
def foo(int i):
    cdef int j
    if i == 0:
        return i
    else:
        j = i+1
        return j

问题是:为什么Cython强制在函数的开头而不是在j块中声明else

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 09:03:51

原因是Python /C++中的范围规则。

Cython试图同时获得Python和C/C++世界的优势。但这两个世界之间存在着一些不相容之处。范围规则是其中之一。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21572718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档