Python:我可以在包__init__模块中设置全局变量吗?

时间:2012-11-08 00:50:25

标签: python initialization global-variables pytables

所以我正在阅读Alex Martelli对other question的回答......

  

“我可能希望初始化的一个例子是在包加载时我想一劳永逸地读取一堆数据(比如文件,数据库或网络) - 在这种情况下将该读取放在包的 init .py中的私有函数中,而不是单独的“初始化模块”,并从包中的每个真实模块中冗余地导入该模块,这样会更好......“

不幸的是,当我尝试这个时:

富/ __初始化__。PY

import tables as tb
global foo
foo = tb.openFile('foo.h5', etc._)
import bar

富/酒吧/ __初始化__。PY

import tables as tb
global bar
bar = foo.createGroup('/', bar)
import MyFunction`

富/酒吧/ MyFunction.py

def MyFunction(*of foo and bar*):
   '...'

>>> import foo
>>> OUTPUT= foo.bar.MyFunction.MyFunction(INPUT)
>>> bar = foo.createGroup('/', bar)
NameError: name 'foo' is not defined

如何定义全局变量而不将它们放在函数中(如here所示)?

1 个答案:

答案 0 :(得分:2)

全局变量不是全局的,因为每个python代码都看到同一组全局变量。全球性实际上只是“模块范围”;模块中定义的所有变量和函数都已经是全局的,并且可能是全局的。

如果你想在另一个模块的全局变量中看到一个模块中定义的变量,唯一的方法是将第一个模块的名称导入第二个模块...... IE:

# myModule.py
foo = "bar"
# yourModule.py
from myModule import foo