我有这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.globvara
和mod2.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>