1

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

如何导入具有现有上下文的模块?

4

2 回答 2

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
>>> 
于 2010-08-13T19:35:59.940 回答
0

调用将产生模块范围内globalsmodule.py全局变量。我假设您希望它查看解释器范围内的全局变量?简短的回答是您不能这样做,而且您不应该这样做。如果它需要一个选项,请故意设置该选项,但不要引用一个神奇的全局。

如果必须,您可以将解释器的全局变量传递给

modules.update_config( globals( ) )
于 2010-08-13T19:32:47.443 回答