Как вызвать функцию из списка?

Например, у меня есть следующий список:

method = [fun1, fun2, fun3, fun4] 

Затем я показываю меню, в котором пользователь должен выбрать номер из 1-4 ( len(method) ). Если пользователь выбирает i , я должен использовать функцию funi . Как я могу это сделать?

Например.

 A=['hello','bye','goodbye'] def hello(n): print n**2 def bye(n): print n**3 def goodbye(n): print n**4 

Если я хочу вызвать функцию bye массивом A, используя

 >>>A[1](7) Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> A[2](5) TypeError: 'str' object is not callable 

Как я могу использовать имена, сохраненные в A для вызова моих функций? потому что каждый метод сохраняется в строке.

Посмотрим…

Вы вызываете функцию fn, используя parens (), как в fn()

Вы получаете доступ к элементу из списка с помощью оператора индексирования [], как в lst[idx]

Итак, объединив два lst[idx](*args)

РЕДАКТИРОВАТЬ

Индексы списка Python основаны на нуле, поэтому для первого элемента – 0, второго 1 и т. Д. Если пользователь выбирает 1-4, вам придется вычесть его.

РЕДАКТИРОВАТЬ

С учетом уточнения можно сделать следующее.

 def method1(): pass def method2(): pass methods = [method1, method2] 

И вы можете использовать вышеприведенную логику. Таким образом, вам не придется сталкиваться с фактическим разрешением строки имени функции на фактическую функцию.

Имейте в виду, что функции в python являются первоклассными, поэтому вы можете сохранить ссылку на них в списке (что мы делаем в methods=[] )

В вашем списке нет функций, кроме строк (которые имеют «случайное» то же имя, что и функции). Просто поместите функции внутри списка:

 def hello(): pass mylist = [hello] mylist[0]() 

Если вам нужно имя функции, вы можете использовать a.__name__ eg

 def hello(): pass mylist = [hello] print("Available functions:") for function in mylist: print(function.__name__)