2017-10-05 93 views
0

我不確定哪裏出錯了 - 我確定它是基本的東西,但我仍然有點不確定是什麼問題。我試圖讓一個按鈕改變汽車的點擊範圍,但它只會設置最後一個。Python:lambda表達式for循環

def draw: 
     car_column = 0 
     for car in boarding_cars: 
      tk.Label(transport_frame, text="{}".format(car.name)).grid(row=0, column=car_column) 
      tk.Button(transport_frame, text=car.range, command= lambda: change_range(car)).grid(row=1, column=car_column) 
      car_column += 1 

    def change_range(car): 
     print car.name 
     if car.range == "mid": 
      car.range = "close" 
     elif car.range == "close: 
      car.range = "mid" 

我明白這只是設置的一切,最後一個在列表中,但我不知道該如何阻止它這樣做。任何幫助,將不勝感激。

回答

2

這是一個常見的問題,當人們不明白lambda是後期綁定。您需要使用partial來代替。

from functools import partial 

tk.Button(transport_frame, text=car.range, command= partial(change_range, car)).grid(row=1, column=car_column) 
+1

只是要清楚,*關閉所有在Python *的後期綁定,而不僅僅是那些有'lambda' –

+0

創建恐怕我從來沒有聽說過的部分 - 感謝這麼多! – Retro