python导入的全局变量不可变

时间:2014-03-15 21:10:36

标签: python global-variables ipython python-module

我有一个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 :(得分:0)

Python - Visibility of global variables in imported modules

问题在于全局性与相关模块有关。

您可以直接导入_辅助:

from mymodule import _auxiliary
_auxiliary.initialize()
print _auxiliary.myvar

答案 1 :(得分:0)

简短的回答是Python中的全局变量对于模块是全局的,而不是跨所有模块。 (这与其他语言略有不同,可能会造成一些混淆)。

解决这个问题的简单方法(还有一些其他方法)是在原始模块中定义一个getter方法,在你的情况下:

_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 value:5”