我在使用全局变量时在 Python 中遇到了一个奇怪的问题。
我有两个模块(文件):mod1.py
和mod2.py
mod1
尝试修改mod2
中定义的全局变量var
。但是mod2中的var
和mod
中的var
似乎是两回事。因此,结果表明这种修改不起作用。
这是代码:
#code for mod2.py
global var
var = 1
def fun_of_mod2():
print var
#code for mod1.py
from mod2 import var,fun_of_mod2
global var #commenting out this line yields the same result
var = 2 #I want to modify the value of var defined in mod2
fun_of_mod2() #but it prints: 1 instead of 2. Modification failed :-(
关于为什么会发生这种情况的任何提示?我怎样才能修改mod1
中mod2
中定义的val
值?
谢谢
当您将var
导入mod1
时:
from mod2 import var,fun_of_mod2
你在mod1的命名空间中var
给它命名。就好像你这样做了:
import mod2
var = mod2.var
fun_of_mod2 = mod2.fun_of_mod2
del mod2
换句话说,现在有两个值的名称, mod1.var
和 mod2.var
.它们起初是相同的,但是当您重新分配mod1.var
时,mod2.var
仍然指向相同的内容。
你想做的只是:
import mod2
然后访问变量并将其分配为 mod2.var
。
需要注意的是,Python 中的全局变量并不是真正的全局变量。它们仅对声明它们的模块是全局的。若要访问另一个模块中的全局变量,请使用module.variable
语法。global
语句可以在函数内部使用,以允许将模块全局名称分配给(如果没有它,分配给变量会使其成为该函数中的局部变量)。它没有其他效果。