我在尝试理解 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()
给出意想不到的(对我而言)输出:
Before setA Value of a is 7 Inside setA, a is now 42 After setA Value of a is 7
我希望最后一次打印 a 的值是 42,而不是 7。关于 Python 的全局变量范围规则,我缺少什么?
最佳答案
全局变量是特殊的。如果您尝试在函数内部分配一个变量 a = value
,它会在函数内部创建一个新的局部变量,即使存在同名的全局变量也是如此。要改为访问全局变量,请添加 global
statement函数内部:
a = 7
def setA(value):
global a # declare a to be a global
a = value # this sets the global value of a
另见 Naming and binding有关 Python 的命名和绑定(bind)规则的详细说明。
关于python - 为什么分配给我的全局变量在 Python 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929777/