[英]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.