将功能存储在列表中并稍后调用它们

时间:2014-12-14 18:42:36

标签: python list function

我想将函数存储在列表中,然后在程序中调用该列表中的那些函数。

这对我有用,但是,我不知道它是否正确:

#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]()

这是将功能存储在列表中并调用它的正确方法吗?或者有更好的方法来做到这一点吗?

4 个答案:

答案 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)

不确定别人是怎么做的,但我也是这样做的。它非常适合我的基本代码,因此我相信它们也可以在其他地方使用。