Python导入的全局变量不可变
我有一个Python模块,比如叫做myModule,它在一个子文件夹里。我有两个文件:
__init__.py
:
from _auxiliary import *
_auxiliary.py
:
myvar=False
def initialize():
global myvar
myvar=5
现在在ipython里,当我运行:
>> import myModule
>> myModule.initialize()
变量myModule.myvar没有变化,也就是它的值是False
如果我把所有内容都放在__init__.py
里,这种情况就不会发生。
有没有什么办法可以解决这个问题?
2 个回答
0
这个问题是,全局变量的可见性是相对于特定模块来说的。
你可以直接导入 _auxiliary 模块:
from mymodule import _auxiliary
_auxiliary.initialize()
print _auxiliary.myvar
1
简单来说,Python中的全局变量是针对一个模块的,而不是所有模块共享的。这跟其他编程语言有点不同,可能会让人感到困惑。
解决这个问题的一种简单方法(还有其他方法)是,在原始模块中定义一个获取方法,像这样:
_myvar=False
def initialize():
global _myvar
_myvar=5
def myvar():
global _myvar
return _myvar
这样,你就可以从任何模块访问到_myvar
这个实例,并且能得到正确的值。
import myModule
myModule.initialize()
print("myvar value:", myModule.myvar())
之前的代码会显示“myvar的值:5”