在Python模块中使用全局变量

时间:2014-09-04 22:50:30

标签: python global-variables

我有这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线,我也得到相同的结果。错误在哪里?

2 个答案:

答案 0 :(得分:5)

Python全局变量仅对模块是全局变量。从其他模块导入变量(例如from mod1 import *)时,Python会在导入模块中创建重复的引用。因此,您现在有两个名称mod1.globvaramod2.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>