Как понять закрытие в лямбда?

Я хочу сделать 5 кнопок в цикле, и для каждой кнопки связывается благодарность за печать индекса. В следующем решении он всегда печатает тот же самый индекс.

Мой код:

for i in range(5): make_button = Tkinter.Button(frame, text ="make!", command= lambda: makeId(i)) def makeId(i): print(i) 

Он всегда печатает 5. Как я могу это исправить?

One Solution collect form web for “Как понять закрытие в лямбда?”

Разрешение переменных в lambdas выполняется при выполнении лямбда. В это время для всех кнопок i = 5. Чтобы исправить эту проблему, сделайте следующее:

  make_button = Tkinter.Button(frame, text ="make!", command= lambda i=i: makeId(i)) 

Это создает i как локальную переменную в лямбда. Эта локальная переменная будет содержать правильное значение i из цикла. локальная переменная может иметь любое имя, не обязательно i , например command= lambda a=i: makeId(a)) .

Python - лучший язык программирования в мире.