Подтвердить что ты не робот

Python - Есть ли способ сохранить функцию в списке или словаре, чтобы при вызове индекса (или ключа) он запускал сохраненную функцию?

Например, я пробовал такие вещи, как mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()], который не работает.

Есть ли какая-то структура с такой функциональностью?

Я понимаю, что я мог бы сделать это так же легко с кучей инструкций def:

def func1():
    foo()
    bar()
    goo()

Но число запросов, которые мне нужны, становится довольно громоздким и трудно запоминающимся. Было бы неплохо красиво обернуть их в словаре, чтобы я мог время от времени проверять ключи.

4b9b3361

Ответ 1

Функции являются объектами первого класса в Python и поэтому вы можете отправлять с помощью словаря. Например, если foo и bar являются функциями, а dispatcher - это словарь.

dispatcher = {'foo': foo, 'bar': bar}

Обратите внимание, что значения foo и bar, которые являются объектами функции, и NOT foo() и bar().

Чтобы вызвать foo, вы можете просто сделать dispatcher['foo']()

EDIT: Если вы хотите запустить несколько функций, хранящихся в списке, вы можете сделать что-то вроде этого.

dispatcher = {'foobar': [foo, bar], 'bazcat': [baz, cat]}

def fire_all(func_list):
    for f in func_list:
        f()

fire_all(dispatcher['foobar'])

Ответ 2

Вы также можете сделать следующее:

Пусть foo1(), foo2(), foo3(),... be функции

Определите foo следующим образом:

foo = lambda n: eval("foo"+str(n))

Теперь вы можете проходить через них.

for i in range(n):
    foo(i)()

n - число функций foo, определенных. Этот способ пригодится, если вы не хотите всегда добавлять новые функции типа foo в список.

Edit:

Важно!!

Пожалуйста, посмотрите это.