为什么普通Python 3.x模块中的以下代码段被视为无效语法?我对设计考虑感兴趣,这些因素指导了在分配之前要求明确声明全局变量和非局部变量的决策。
def foo():
global a = 1
这个显式声明是必需的,以便提醒您(与类和实例变量的表面类似情况不同),您实际上是在外部作用域中修改变量的值
这表明在更改其价值之前先前宣布global a
是程序员的安全措施。另一个原因可能是Python是一种动态类型的语言,所以如果你考虑一下,那个特定的行看起来就像普通的Python代码。
我鼓励你阅读https://docs.python.org/3/reference/simple_stmts.html#the-global-statement并试用这门语言。最后,您可以在其中一个邮件列表中询问该语言的核心开发人员:https://www.python.org/community/lists/。如果您发现任何有趣的内容,请与社区分享。
global
关键字表示应该在全局命名空间中查找变量,如globals()
中所示。它与const
中的c++
声明完全不同。所以在你提到global a = 1
之前,应该创建变量a
。
def foo():
global a
没有SyntaxError
这很好。但由于a
未在函数foo
之前定义,因此当您调用NameError
时,解释器将返回foo()
。
总之,关键字global
用于修改在函数等局部作用域内的全局作用域中定义的变量。