python - 为什么分配给我的全局变量在 Python 中不起作用?

标签 python global-variables scope

我在尝试理解 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/

相关文章:

javascript - 为什么 jQuery.getJSON() 会压扁我的 javascript 字典?

c++ - 同一类使用的映射引用类

c - C 中的全局变量是否是静态的?

python - 如何在具有可变小数位数的python中格式化小数

python - 从 pandas 数据框中挑选某些索引

python - 如何让 Python 记住函数内部创建的列表以供将来使用

postgresql - 从 PL/PGSQL 引用 session 变量 (\set var ='value')

Ruby 记录器作用域

Python - 将 pgqueryobject 转换为字符串

使用 stat.c 更改全局变量