【发布时间】:2013-01-03 19:50:00
【问题描述】:
为什么在没有先在全局范围内声明 a 的情况下,以下代码在 Python 中有效?
def setA():
global a
a = 5
def printA():
print a
setA()
printA()
在我看来,这是正确的做法:
a = None
def setA():
global a
a = 5
def printA():
print a
setA()
printA()
【问题讨论】:
-
有什么选择?如果
a在全局范围内不存在,global是否应该静默失败并让它在本地?它应该引发异常吗? -
我的印象是 global 关键字的意思是“以下指的是全局范围内的变量”。我认为当您执行“打印”时,应该会出现变量未知的错误。
-
@Stewart:这并不意味着,它意味着“以下名称的任何使用现在都被认为是在全局范围内运行”。该名称是否已存在于那里并不重要。如果您分配给它但它不存在,它会创建它,就像您在模块顶层实际分配给它一样。
-
@BrenBarn 好的,这是有道理的。像我的第二段代码而不是第一种方式那样做会更好吗?
-
@Stewart:按照这些思路做一些事情可能是有意义的,尽管
None可能不是最佳选择。通常你只会将全局变量用于某种全局配置选项,所以你会设置一个初始的、有用的默认值,然后可能会在以后更改它。但是,是的,为了使代码更具可读性,最好尽早定义全局。
标签: python scope global-variables