在Python模块中使用全局变量



我有这4个模块globals.py

globvara = "a"

mod1.py

from globals import *
print globvara

输出:

mod2.py

from mod1 import *
def changegv(newval1):
    #global globvara
    globvara = newval1
def usechangegv(newval2):
    changegv(newval2)

和mod3.py

from mod2 import *
usechangegv("b")
print globvara

输出:一

我想知道为什么模块2中的globalvar没有改变。我在全局变量中遗漏了一些东西。即使我取消注释全局globvara行,我也会得到相同的结果。错误在哪里?

Python全局变量仅对模块全局。从另一个模块(例如from mod1 import *)导入变量时,Python会创建对导入模块中的值的重复引用。因此,现在有两个名称,mod1.globvaramod2.globvara,它们最初指向相同的值,但没有任何连接。如果在mod2.py中更改globvara,则表示正在更改mod2.globvara,并且mod1.globvara不受影响

为了避免这个问题,请导入模块,而不是其中定义的单个名称。例如,import globals。然后总是参考globals.globvara(或者更好的是,globals.a)。由于您总是访问和分配相同的名称,因此它将按您期望的方式工作。

不要使用

from <module> import <variable>

当它创建变量的副本时。

做一个简单的:

import <module>

所有对全局变量的访问都应该使用"模块"中的"变量":

<module>.<variable> = ...

print <module>.<variable>

相关内容

  • 没有找到相关文章