Python导入的全局变量不可变

0 投票
2 回答
2069 浏览
提问于 2025-04-17 22:28

我有一个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

Python - 导入模块中的全局变量可见性

这个问题是,全局变量的可见性是相对于特定模块来说的。

你可以直接导入 _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”

撰写回答