2017-10-05 543 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