使用上下文导入模块

1 投票
2 回答
5746 浏览
提问于 2025-04-16 02:45

我有一个叫做 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
>>> 

撰写回答