Сначала краткая версия вопроса:
Предположим, у нас есть модуль с именем «module» и python скрипт «caller.py», который импортирует модуль. Можно ли совместно использовать пространство имен globals () caller.py с модулем?
Чтобы я мог сделать что-то вроде этого:
module.py
def print_handle(fkt_name):
globals()[fkt_name]
вызывающий. py:
def function_from_caller():
return 0
import module
module.print_handle('function_from_caller')
# which then returns something like:
# <function __main__.function_from_caller()>
Длинная версия:
Насколько я понимаю, объем импортированного модуля в python ограничен этим модулем. Все, что не определено в модуле или импортировано каким-то образом, ему неизвестно.
Если модуль импортирован, я могу поделиться его пространством имен с пространством имен вызывающего абонента, либо специально назвав интересующие функции с помощью
from module import function_of_interest
или для совместного использования всего пространства имен
from module import *
Однако, насколько я знаю, невозможно добиться этого наоборот, или это так? Могу ли я каким-либо образом передать пространство имен из вызывающей функции в модуль? Т.е. с чем-то вроде
pi = 3
import module with pi
или, если я хочу передать все,
import module with *
Если это невозможно, как предполагалось, почему?