Wie verstehe ich die Schließung in einem Lambda?

Ich möchte 5 Tasten in einer Schleife machen, und für jede Schaltfläche binden Sie eine Empfehlung, den Index zu drucken. In der folgenden Lösung druckt es immer denselben Index.

Mein Code wie folgt:

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

Es druckt immer 5. Wie kann ich das beheben?

One Solution collect form web for “Wie verstehe ich die Schließung in einem Lambda?”

Die Auflösung von Variablen in Lambdas erfolgt, wenn Lambda ausgeführt wird. Zu diesem Zeitpunkt, für alle Tasten i = 5. Um dieses Problem zu beheben, gehen Sie wie folgt vor:

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

Dies schafft i als lokale Variable in einem Lambda. Diese lokale Variable hat den korrekten Wert von i aus der Schleife. Die lokale Variable kann einen beliebigen Namen haben, nicht unbedingt i , zB command= lambda a=i: makeId(a)) .

Python ist die beste Programmiersprache der Welt.