2016-11-17 1 views
0

У меня есть функция в суб-модуля, который должен манипулировать переменные из родительского/интерпретатора Globals (утверждение, проверки), как это:Как получить доступ к Globals() родительского модуля в подмодуль?

import mymodule 
mymodule.fun_using_main_interpreter_globals1() 

Если я сделаю это, он работает:

mymodule.fun_using_main_interpreter_globals1(explicit_pass= globals()) 

Но, если я не перейду эксплицитно globals(), как я могу получить доступ к интерпретатору/parent globals() в мой подмодуль?

В IPython его можно поместить в настройки профиля.

+0

Это может быть ясно для вас уже, но для кого-либо еще, читающего этот вопрос: изменение глобальных символов в другом модуле, как правило, является плохим. Если вы считаете, что хотите сделать это, сделайте шаг назад и подумайте о том, как решить вашу проблему, которая не связана с этим. Трудно следить за тем, что делает код, если модули могут свободно переключаться и менять друг друга. –

+0

Сообщение только упоминает о доступе к Globals() от родительского звонящего, не имеет ничего общего с изменением глобальных переменных() ..... Попробуйте сделать шаг назад, попытайтесь придумать случаи/проблемы при доступе к Globals() (нет другого пути). –

ответ

0

Я никогда не ходил по-настоящему на этой территории, но смотрит at the documentation это должно сделать это:

caller_globals = dict(inspect.getmembers(inspect.stack()[1][0]))["f_globals"] 

inspect модуль позволяет получить доступ, среди прочего, стек питон интерпретатора. Второй элемент (доступ с [1]) является вызывающим, кадр стека является первым элементом кортежа (доступ к которому равен [0]), и он содержит в качестве члена текущий глобальный словарь для этого контекста (с именем f_globals).

Обратите внимание, что это возвращает globals()вызывающего абонента, а не тот модуль, для которого вызываемая функция является подмодулем. В общем, я думаю, что это невозможно, потому что один и тот же модуль может быть подмодулем разных модулей (подмодуль является всего лишь глобальным в модуле, и, возможно, разные модули используют один и тот же объект подмодуля).

+0

Звучит, что инспектировать есть правильные инструменты, чтобы получить зависимость от дерева в схеме вызова. –

 Смежные вопросы

  • Нет связанных вопросов^_^