我在尝试理解python作用域规则时遇到了麻烦。
使用以下脚本:
a = 7 def printA(): print "Value of a is %d" % (a) def setA(value): a = value print "Inside setA, a is now %d" %(a) print "Before setA" printA() setA(42) print "After setA" printA()
给我意外的输出:
在setA之前 a的值为7 在setA内,a现在为42 setA之后 a的值为7
我希望最后一次显示a的值是42,而不是7。我在Python的全局变量作用域作用域规则方面缺少什么?
全局变量是特殊的。如果您尝试分配给a = value函数内部的变量,即使存在具有相同名称的全局变量,它也会在函数内部创建新的局部变量。要改为访问全局变量,请在函数内添加一条global语句:
a = value
global
a = 7 def setA(value): global a # declare a to be a global a = value # this sets the global value of a
另请参阅命名和绑定,以获取有关Python命名和绑定规则的详细说明。