Im folgenden Code:
options=["INFO", "WARNING", "DEBUG"] for i in range(len(options)): option=options[i] __cMenu.add_command( label="{}".format(option), command=lambda: self.filter_records(column, option) )
werden mehrere Lambdas erstellt und gespeichert. Diese Lambdas sollten unterschiedliche Werte der lokalen Variablenoption erfassen. Wenn diese Lambdas jedoch verwendet werden, verhalten sie sich alle so, als ob die Option auf „DEBUG“ gesetzt wäre, den letzten Wert, den sie in der Schleife annimmt.
Dieses Problem entsteht aufgrund des Auswertungszeitpunkts von Namen in Funktionskörpern . Im bereitgestellten Code werden die Namen ausgewertet, wenn die Funktion ausgeführt wird. Infolgedessen verweisen die in der Schleife erstellten Lambdas alle zum Zeitpunkt der Ausführung auf denselben Optionswert, nämlich „DEBUG“.
Um dieses Problem zu umgehen, kann die folgende Änderung vorgenommen werden:
__cMenu.add_command(label="{}".format(option), command=lambda opt=option: self.filter_records(column, opt))
Durch die Einführung von option=option als Argument für die Lambda-Funktion erfasst jedes Lambda den korrekten Wert der Option zum Zeitpunkt der Erstellung, anstatt sich auf den Wert zum Zeitpunkt der Ausführung zu verlassen. Dadurch wird sichergestellt, dass jedes Lambda mit dem gewünschten Wert der Option arbeitet.
Das obige ist der detaillierte Inhalt vonWarum verwenden meine Lambdas in einer For-Schleife nur den letzten Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!