Совместное использование пространства имен вызывающего абонента с импортированным модулем - PullRequest
1 голос
/ 27 мая 2020

Сначала краткая версия вопроса:

Предположим, у нас есть модуль с именем «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 *

Если это невозможно, как предполагалось, почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...