Импорт модуля с контекстом - PullRequest
1 голос
/ 13 августа 2010

У меня есть модуль с именем 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 ]

2 голосов
/ 13 августа 2010

Это довольно хакерски - не полагайтесь на это для производственного кода, поскольку не во всех реализациях 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 голосов
/ 13 августа 2010

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

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

modules.update_config( globals( ) )
...