了解 Python 中的全局变量



我在使用全局变量时在 Python 中遇到了一个奇怪的问题。

我有两个模块(文件):mod1.pymod2.py

mod1尝试修改mod2中定义的全局变量var。但是mod2中的varmod中的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 :-(

关于为什么会发生这种情况的任何提示?我怎样才能修改mod1mod2中定义的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.varmod2.var .它们起初是相同的,但是当您重新分配mod1.var时,mod2.var仍然指向相同的内容。

你想做的只是:

import mod2

然后访问变量并将其分配为 mod2.var

需要注意的是,Python 中的全局变量并不是真正的全局变量。它们仅对声明它们的模块是全局的。若要访问另一个模块中的全局变量,请使用module.variable语法。global 语句可以在函数内部使用,以允许将模块全局名称分配给(如果没有它,分配给变量会使其成为该函数中的局部变量)。它没有其他效果。

相关内容

  • 没有找到相关文章

最新更新