Если переменные, которые вы хотите передать своим функциям, уже определены в этот момент, вы можете просто использовать частичное приложение . У Python есть объект partial
в его stdlib, но здесь достаточно просто lambda
:
foo = 42
bar = ["s", "p", "a", "m"]
baaz = {"parrot": "dead"}
def mySC(i):
switcher = {
'1': lambda: func1(foo),
'2': lambda: func2(bar),
'3': lambda: func3(baaz)
}
func = switcher.get(i, lambda: 'Invalid')
return func()
Если эти переменные не определены, когда вы определяете свою функцию myMC
, но все еще «исправлено» от одного вызова к другому (в том же процессе), вы можете добавить слой косвенности для динамического создания функции MyS C:
def create_switch(foo, bar, baaz):
def mySC(i):
switcher = {
'1': lambda: func1(foo),
'2': lambda: func2(bar),
'3': lambda: func3(baaz)
}
func = switcher.get(i, lambda: 'Invalid')
return func()
return mySC
foo = 42
bar = ["s", "p", "a", "m"]
baaz = {"parrot": "dead"}
mySC = create_switch(foo, bar, baaz)
mySC(1)