我有这4个模块 globals.py
globvara = "a"
mod1.py
from globals import *
print globvara
输出:a
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
输出: 一个 一个
我想知道为什么globalvar在模块2中没有改变。我在全局变量中缺少一些东西。即使我取消注释全局globvara线,我也得到相同的结果。错误在哪里?
答案 0 :(得分:5)
Python全局变量仅对模块是全局变量。从其他模块导入变量(例如from mod1 import *
)时,Python会在导入模块中创建重复的引用。因此,您现在有两个名称mod1.globvara
和mod2.globvara
,它们最初指向相同的值,但不以任何方式连接。如果您更改globvara
中的mod2.py
,则表示您正在更改mod2.globvara
并且mod1.globvara
不会受到影响。
要避免此问题,请导入模块,而不是导入其中定义的单个名称。例如,import globals
。然后,请始终参考globals.globvara
(或者更好,globals.a
)。由于您总是访问并指定相同的名称,因此它将按您期望的方式工作。
答案 1 :(得分:1)
不要使用
from <module> import <variable>
因为它创建了变量的副本。
做一个简单的事:
import <module>
所有对全局变量的访问都应使用&#34;变量&#34;在&#34;模块&#34;:
<module>.<variable> = ...
或
print <module>.<variable>