例如,我有以下列表:
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
中保存的名称来调用我的功能?因为每个方法都保存在一个字符串中。
答案 0 :(得分:8)
让我们看看......
您可以使用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__)