使用上下文导入模块
我有一个叫做 module.py 的模块,它会检查上下文中的一个全局变量。
module.py:
----------
if 'FOO' in globals():
print 'FOO in globals'
else:
print 'nah'
in python shell:
----------------
In [1]: FOO = True
In [2]: import module
nah
我该如何在已有上下文的情况下导入模块呢?
2 个回答
0
在 module.py
文件中调用 globals
会得到这个模块范围内的全局变量。我猜你是想让它查看解释器中的全局变量吧?简单来说,你是做不到的,而且其实也不应该这样做。如果需要某个选项,就明确地设置这个选项,不要去依赖一个神秘的全局变量。
如果你真的需要这样做,可以通过以下方式传递解释器的全局变量:
modules.update_config( globals( ) )
2
这个方法有点不太正规——不要在正式的代码中依赖它,因为并不是所有的Python版本都有一个叫做inspect.getouterframes
的功能。不过,在CPython这个版本中是可以用的:
import inspect
record=inspect.getouterframes(inspect.currentframe())[1]
frame=record[0]
if 'FOO' in frame.f_globals:
print 'FOO in globals'
else:
print 'nah'
% python
>>> import test
nah
>>>
% python
>>> FOO=True
>>> import test
FOO in globals
>>>