2013-05-02 86 views
0

好吧,所以這裏的交易,說我有一個函數(take_action),調用另一個函數。但是我們不知道take_action會調用哪個函數。將一個函數(它是動態分配的)和特定參數一起分配給一個變量。

我有這樣的一部分想通了感謝this question的事情是,他們對付的是沒有參數的功能這個問題,我的take_action可以採取的是彼此完全不同的幾種不同的功能之一,擁有完全不同採取的行動,不同的論點。

現在對於一些示例代碼:

def take_action(): 
    action['action']() 
    #does other stuff with 'other_stuff_in_the_dic' 

def move(x,y): 
    #stuff happens 

action = {'action': move, 'other_stuff_in_the_dic': 'stuff' } 

(在這種情況下,「行動」是動,但就像我說的,這是根據特定用戶輸入動態分配)

我會喜歡做的,是這樣的:

action = { 'action': move(2,3), 'other_stuff': 'stuff' } 

(顯然調用該函數存在,因爲它具有(),因此它不會工作)

我只是一個初學者程序員,我唯一想到的就是使用一個列表,它是在dic中的另一個鍵中,但是隻會傳遞一個列表參數,而不是傳遞列表中的每個內容作爲論點。

什麼是實現此目的的一種方法,所以'action'鍵(或另一個鍵上的字典?)還存儲了在take_action上調用它時應該使用的參數?

回答

5

使用functools.partial()存儲功能,其參數:

from functools import partial 

action = {'action': partial(move, 2, 3), 'other_stuff': 'stuff'} 

調用action['action']()結果move(2, 3)被調用。

相關問題