2014-09-23 56 views
0

我知道,點擊按鈕時調用一個函數,我們在按鈕Widget括號內寫入command = name_of_function。但是,當我們試圖通過在函數名稱後面的括號內添加一個參數來將值傳遞給函數時,該函數被調用得太早,而不是單擊該按鈕時。爲按鈕指定一個函數 - lambda有什麼不同?

我知道我們可以使用lambda來解決這個問題。 command = Lambda: name_of_function(argument)

但我不明白的是爲什麼lambda工作,而不是一個普通的函數調用用括號和參數?

例如,這個工程:

editmenu.add_command(label="1. Problem Definition", command=lambda: changeText(0)) 

但這並不:

editmenu.add_command(label="1. Problem Definition", command=changeText(0)) 
+0

請提供的示例代碼 – 2014-09-23 07:29:22

+0

謝謝jonrsharpe! – sw123456 2014-09-23 07:40:43

回答

0

不會有什麼lambda定義一個新的匿名函數,當它被調用時,將調用函數 - 所以是這樣的:

api_call(command=lambda: my_function(23)) 

非常相似:

def temp_func(): 
     my_function(23) 

    ..... 
    ..... 
    api_call(command=temp_func) 

主要區別在於temp_func未定義,不能輕易重複使用。

+0

不知道編輯實際添加任何東西,但它確實刪除刻意強調的「定義」, - 這是定義,而不是調用(呼叫),這是很重要的位置 - 因此我的重點。 – 2014-09-23 08:08:50

+1

這可能是值得注意的第三個選項,'命令=部分(創建my_function,23)'。不同於'lambda',這至少給你在回溯有用的,而不是''的東西,這是不太可能誤導新手以爲它是一個老鷹函數調用。 – abarnert 2014-09-23 08:13:06

相關問題