2010-08-13 5 views
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 

Как я могу импортировать модули с существующим контекстом?

ответ

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 
>>> 
+0

+1 для чистой нехорошо! – katrielalex

+0

это не требуется и не рекомендуется. –

0

Вызов globals в module.py даст глобальные переменные в объеме модуля. Я предполагаю, что вы хотите, чтобы он смотрел на глобалы в рамках интерпретатора? Короткий ответ заключается в том, что вы не можете этого сделать, и вам не следует этого делать. Если ему нужна опция, задайте этот параметр намеренно, но не ссылайтесь на магический глобальный.

Если необходимы, вы можете передать глобал интерпретатора с

modules.update_config(globals())