【发布时间】:2019-06-12 03:54:14
【问题描述】:
为什么普通 Python 3.x 模块中的以下代码被视为无效语法?我对指导在分配之前需要显式声明全局和非局部变量的决定的设计考虑感兴趣。
def foo():
global a = 1
【问题讨论】:
标签: python-3.x scope namespaces global-variables
为什么普通 Python 3.x 模块中的以下代码被视为无效语法?我对指导在分配之前需要显式声明全局和非局部变量的决定的设计考虑感兴趣。
def foo():
global a = 1
【问题讨论】:
标签: python-3.x scope namespaces global-variables
需要这个显式声明以提醒您(与类和实例变量表面上类似的情况不同)您实际上是在外部范围内修改变量的值
这表明global a 在更改其值之前的先前声明是程序员的安全措施。另一个原因可能是 Python 是一种动态类型的语言,所以如果你仔细想想,那一行代码看起来一点也不像普通的 Python 代码。
我鼓励您阅读https://docs.python.org/3/reference/simple_stmts.html#the-global-statement 并尝试使用该语言。最后,您可以在这里的其中一个邮件列表中询问该语言的核心开发人员: https://www.python.org/community/lists/。如果您发现任何有趣的东西,请与社区分享。
【讨论】:
global 关键字表示应在全局命名空间中查找变量,如globals()。这与c++ 中的const 声明完全不同。所以在你引用global a = 1之前,应该已经创建了变量a。
def foo():
global a
没有SyntaxError 也可以正常工作。但是由于a没有在函数foo之前定义,当你调用foo()时解释器会返回一个NameError。
综上所述,关键字global 用于修改在全局范围内定义在局部范围内的变量,如函数。
【讨论】: