使用上下文导入模块

时间:2010-08-13 18:59:45

标签: python import scope globals

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

这是相当hackish - 不要依赖于生成代码,因为并非所有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
>>> 

答案 1 :(得分:0)

globals中调用module.py将在模块的范围中生成全局变量。我假设你想让它看一下解释器范围内的全局变量?简短的回答是,你不能这样做,你不应该这样做。如果它需要一个选项,请故意设置该选项,但不要引用魔术全局。

如果必须,可以使用

传递解释器的全局变量
modules.update_config( globals( ) )