我想将函数存储在列表中,然后在程序中调用该列表中的那些函数。
这对我有用,但是,我不知道它是否正确:
#example functions, my functions would actually get user input etc.
def func1():
return 2
def func2():
return 3
options = [ func1, func2 ]
#call functions
options[0]()
这是将功能存储在列表中并调用它的正确方法吗?或者有更好的方法来做到这一点吗?
答案 0 :(得分:3)
是的,你可以做到。如果您想使用" one liner"来呼叫列表中的所有功能。你可以做到以下几点:
results = [f() for f in options]
答案 1 :(得分:2)
是的,这是正确的,但如果你的功能本质上是单行的,我建议你也看看lambdas
,这样你的整个代码就可以简化为:
options = [lambda: 3, lambda: 2]
正如评论中已经指出的那样,你当然需要记住列表中函数的顺序。
答案 2 :(得分:1)
我喜欢做像
这样的事情class Commander:
def CommandERROR(*args,**kwargs):
print "Invalid command"
def CommandFunc1(*args,**kwargs):
print "Do Command 1"
def CommandFunc2(*args,**kwargs):
print "Do Command 2"
def CallCommand(command,*args,**kwargs):
self.__dict__.get("Command"+command,self.CommandError)(*args,**kwargs)
cmd = Commander()
cmd.CallCommand("Func1","arg1",something=5)
cmd.CallCommand("Func2","arg2",something=12)
cmd.CallCommand("Nothing","arg1",something=5)
正如评论中指出的那样,你也可以将它放在自己的文件中来创建命名空间并省略该类......虽然如果你需要影响状态那么也许一个类是更好的选择...你也可以使用简单的词典
答案 3 :(得分:-1)
不确定别人是怎么做的,但我也是这样做的。它非常适合我的基本代码,因此我相信它们也可以在其他地方使用。