Можно ли вызвать глобальную функцию из импортируемой функции в Python 3?Python: как вызвать глобальную функцию из импортированного модуля
./folders/folder1/def.py
def do_test():
print("++ def.do_test()")
global_function_1()
print("-- def.do_test()")
./main.py
import importlib
def global_function_1():
print("doing function 1 thing...")
mod = importlib.import_module('folders.folder1.def')
mod.do_test()
У меня есть ошибка, как это.
++ def.do_test()
Traceback (most recent call last):
File "C:\src\python\class2\main.py", line 10, in <module>
mod.do_test()
File "C:\src\python\class2\folders\folder1\def.py", line 4, in do_test
global_function_1()
NameError: name 'global_function_1' is not defined
По-видимому, те же функции работают нормально, если они определены в одном файле.
def global_function_1():
print("calling the global function 1")
def do_test():
print("++ def.do_test()")
global_function_1()
print("-- def.do_test()")
do_test()
Результаты является
++ def.do_test()
calling the global function 1
-- def.do_test()
Если Python не позволяет этого, что бы ближайшую альтернативу? В моем реальном проекте глобальные функции имеют число обращений к глобальным переменным . Если все возможное, я бы хотел избежать размещения всех глобальных функций и переменных в отдельном классе.
EDIT: Вышеприведенный фрагмент кода, чтобы выделить мою проблему. В моем реальном проекте,
- У меня есть дюжина глобальных функций. Таким образом, передача указателя через параметр функции не рекомендуется.
- У меня есть десяток других файлов def.py в нескольких папках. Мне нужно забрать файл def.py во время выполнения в зависимости от условий сорта. Таким образом, статическая ссылка с main.py на def.py не рекомендуется.
Что-нибудь случилось с добавлением 'от главного импорта global_function_1' в' def.py'? –
В вашем вопросе нет классов в коде, так как все это относится к «из класса» в названии вашего вопроса? – martineau
@Rawing - Спасибо за советы. Я привел свой результат в ответ SmeltQuake ниже, который дал мне тот же совет. – Tony