Python 将函数存储在列表中,然后调用它们

Python 将函数存储在列表中,然后调用它们,python,list,function,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]() 这是在列表中存储函数并调用它的正确方法

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

这对我来说很有效,但我不知道这是否正确:

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

这是在列表中存储函数并调用它的正确方法吗?还是有其他更好的方法

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

是的,这是正确的,但是如果您的函数实际上是一个线性函数,我建议您也看看,这样您的整个代码就可以简化为:

options = [lambda: 3, lambda: 2]

正如评论中已经指出的,您当然需要记住列表中函数的顺序。

是的,您可以这样做。如果要使用“一行程序”调用列表中的所有函数,可以执行以下操作:

results = [f() for f in options]

我喜欢做像这样的事情

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)

正如在注释中指出的,您还可以将其放在自己的文件中,以创建名称空间,并将类ommit。。。虽然如果您需要影响状态,那么类可能是更好的选择。。。您也可以使用一个简单的dict

,这种方式非常好,为什么您首先要将函数存储在一个列表中?你可以随时给他们打电话,不用把他们储存在列表中。我觉得这样很好。当然,您需要记住列表中函数的顺序。否则,您可能希望使用字典并按名称访问函数对象:
options={'func1':func1',func2':func2};选项['func1']()
。但是你首先要问自己为什么要这样做。你可以把函数放在一个模块中,然后导入它。谢谢,我不确定。我从未见过这样的事情,我所做的只是实验和猜测。我不想让它在我的程序中引起未来的问题,因为我不知道这是否安全/实际工作等@qqvc,因为在我的情况下,这实际上是代码减少和更容易修改。我得到了用户输入(一个数字),现在我只需要确保索引是有效的,并从该列表中逐个索引调用函数。否则我将不得不创建一个巨大的if块。这是混乱,丑陋和大量的代码。你知道我的意思吗?如果你不需要维护状态或使用任何特殊的方法,就没有理由创建一个类。如果您只是需要一个名称空间,请使用模块。@iCodez。。。我同意。。。但在堆栈溢出答案中为命名空间显示类更容易