6

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

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

mod1试图修改在var中定义的全局变量mod2。但是varin mod2 和varinmod似乎是两个不同的东西。因此,结果表明这种修改不起作用。

这是代码:

#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 :-(

关于为什么会发生这种情况的任何提示?以及如何修改in中val定义的值?mod2mod1

谢谢

4

1 回答 1

12

当您var导入mod1

from mod2 import var,fun_of_mod2

var 在 mod1 的命名空间中为其命名。就好像你这样做了:

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语句可以在函数内部使用以允许分配模块全局名称(没有它,分配给变量使其成为该函数中的局部变量)。它没有其他效果。

于 2012-06-03T07:10:34.500 回答