簡體   English   中英

將功能存儲在列表中並稍后調用它們

[英]Store functions in list and call them later

我想將函數存儲在列表中,然后在程序中調用該列表中的那些函數。

這對我有用,但是,我不知道它是否正確:

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

這是將函數存儲在列表中並調用它的正確方法嗎? 或者有更好的方法來做到這一點嗎?

是的,你可以做到。 如果要使用“單行”調用列表中的所有功能,可以執行以下操作:

results = [f() for f in options]

是的,這是正確的,但如果你的功能本質上是單行的,我建議你也看看lambdas ,這樣你的整個代碼就可以簡化為:

options = [lambda: 3, lambda: 2]

正如評論中已經指出的那樣,您當然需要記住列表中函數的順序。

我喜歡做類似的事情

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)

正如在評論中指出的那樣,你也可以將它放在自己的文件中來創建命名空間並省略該類...雖然如果你需要影響狀態那么也許一個類是一個更好的選擇...你也可以使用一個簡單的字典

不確定別人怎么做,但我也是這樣做的。 它非常適合我的基本代碼,因此我相信它們也可以在其他地方使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM