如何从列表中调用函数?

时间:2015-05-31 21:09:09

标签: python function

例如,我有以下列表:

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

如果我想使用

调用数组A的函数bye
>>>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中保存的名称来调用我的功能?因为每个方法都保存在一个字符串中。

2 个答案:

答案 0 :(得分:8)

让我们看看......

您可以使用fn()

中的parens()来调用函数fn

您可以通过索引运算符[]访问列表中的项目,如lst[idx]

因此,通过组合两个lst[idx](*args)

修改

Python列表索引从零开始,因此第一项为0,第二项为1,等等......如果用户选择1-4,则必须减去一项。

修改

鉴于澄清,可以完成以下工作

def method1():
    pass

def method2():
    pass


methods = [method1, method2]

你可以使用上面的逻辑。通过这种方式,您不必将实际函数名称的字符串实际解析为实际函数。

请记住,python中的函数是第一类,因此您可以将它们的引用存储到列表中(我们在methods=[]行中执行的操作)

答案 1 :(得分:2)

在您的列表中不是函数而是字符串(与函数“具有”随机“相同的名称)。只需将函数放在列表中:

def hello():
    pass

mylist = [hello]
mylist[0]()

如果您需要功能名称,可以使用a.__name__例如

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