2

所以我正在阅读 Alex Martelli 对其他问题的回答......

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

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

foo/__init__.py

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

foo/bar/__init__.py

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

foo/bar/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

如何定义全局变量而不将它们放入函数中(如此处所示

4

1 回答 1

2

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

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

# myModule.py
foo = "bar"
# yourModule.py
from myModule import foo
于 2012-11-08T01:08:04.933 回答