Попробуйте
def get_main(name):
def helper1():
print("helper1")
def helper2():
print("helper2")
def main1():
print("Running helpers from main1")
helper1()
helper2()
def main2():
print("Running helpers from main2")
helper1()
helper2()
if name == "main1":
return main1
if name == "main2":
return main2
main1 = get_main("main1")
main2 = get_main("main2")
Затем вы можете запустить функцию следующим образом:
main1()
main2()
helper1()
вывод:
Running helpers from main1
helper1
helper2
Running helpers from main2
helper1
helper2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'helper1' is not defined
Канонический способ сделать это должно использовать словарь для эмуляции switch
или if/elif
. Вы найдете несколько вопросов подобным проблемам здесь на ТАК.
Поместите свои функции в словарь с Вашими кодами состояния как ключи:
funcs = {
'CONNECT': connect,
'RAWFEED': rawfeed,
'RAWCONFIG' : rawconfig,
'TESTFEED': testfeed
}
funcs[status](*args, **kwargs)
Вы могли бы найти getattr
полезный, я предполагаю
import module
getattr(module, status.lower())(*args, **kwargs)
предположение, что эти функции принадлежат некоторому модулю:
import module
return getattr(module, status.lower()).__call__(*args, **kwargs)
это швы, что можно использовать getattr в немного отличающемся (по-моему, более изящный путь)
import math
getattr(math, 'sin')(1)
или если функция импортируется как ниже
from math import sin
грех находится теперь в пространстве имен, таким образом, можно назвать его
vars()['sin'](1)
Некоторое улучшение ответа SilentGhost:
globals()[status.lower()](*args, **kwargs)
если Вы хотите назвать функцию, определяемую в текущем модуле.
Хотя это выглядит ужасным. Я использовал бы решение со словарем.
Посмотрите на это: getattra как функциональный диспетчер
Я встретился с той же проблемой ранее. Взгляните на этот вопрос, я думаю, что Вы ищете.
Надежда это полезно
Eef
некоторое изменение от предыдущего:
funcs = {
'CONNECT': connect,
'RAWFEED': rawfeed,
'RAWCONFIG' : rawconfig,
'TESTFEED': testfeed
}
func = funcs.get('status')
if func:
func(*args, **kwargs)