xia*_*012 6 python global-variables
在使用全局变量时,我在Python中遇到了一个奇怪的问题.
我有两个模块(文件):mod1.py和mod2.py
mod1尝试修改中var定义的全局变量mod2.但是varin mod2和varin mod似乎是两个不同的东西.因此,结果表明这种修改不起作用.
这是代码:
#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 :-(
Run Code Online (Sandbox Code Playgroud)
有关为何会发生这种情况的任何提示 我怎样才能修改valin mod2中定义的值mod1?
谢谢
kin*_*all 12
当您导入var到mod1:
from mod2 import var,fun_of_mod2
Run Code Online (Sandbox Code Playgroud)
你var 在mod1的命名空间中给它起了名字.好像你这样做了:
import mod2
var = mod2.var
fun_of_mod2 = mod2.fun_of_mod2
del mod2
Run Code Online (Sandbox Code Playgroud)
换句话说,现在有两个名称,mod1.var和mod2.var.它们起初是相同的,但是当你重新分配时mod1.var,mod2.var仍然指向同一个东西.
你想要做的只是:
import mod2
Run Code Online (Sandbox Code Playgroud)
然后访问并将变量赋值为mod2.var.
值得注意的是,Python中的全局变量并不是真正的全局变量.它们仅对它们声明的模块是全局的.要访问另一个模块中的全局变量,请使用module.variable语法.该global语句可以在函数内部使用,以允许分配模块全局名称(没有它,分配给变量使其成为该函数中的局部变量).它没有其他影响.