法在下面的代碼,構建按鈕的兩種方式的行爲不同:爲什麼這些按鈕的構造不同的方式
from Tkinter import *
def buildButton1():
root = Tk()
Button(root, command = lambda : foo(1)).pack()
Button(root, command = lambda : foo(2)).pack()
def buildButton2():
root = Tk()
buttons = (Button(root, command = lambda : foo(i)) for i in range(2))
map(lambda button : button.pack(), buttons)
def foo(number):
print number
兩種方法都Tkinter的窗口有兩個表面上相同的按鈕佈局,但在第二個例子 - 這似乎更簡潔的是我們添加了50個按鈕而不是2個 - 傳入foo的值是最後一次迭代的i。
因此,在這種情況下,按任何使用buildButton2製作的按鈕都將打印1,其中buildButton1的按鈕將分別打印0和1。爲什麼有差異?有沒有辦法讓buildButton2按預期工作?
編輯 它已經指出,這是一個重複的問題,而這個建設一個更正確的方法是這樣寫:
buttons = (Button(root, command = lambda i=i : foo(i)) for i in range(2))
這給期望的結果。多謝你們!
除非我錯了,你需要'按鈕=(按鈕(根,命令=拉姆達我:在範圍FOO(I)),其中i(2)) ',這樣''我'的值被傳遞給lambda。 –
不要以爲是對的,Burhan;事實上,它似乎拋出一個異常,因爲按鈕不傳遞任何參數傳遞任何參數到函數 –