小编典典

为什么在Python中无法分配全局变量?

python

我在尝试理解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的全局变量作用域作用域规则方面缺少什么?


阅读 211

收藏
2020-12-20

共1个答案

小编典典

全局变量是特殊的。如果您尝试分配给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命名和绑定规则的详细说明。

2020-12-20