>>> funcs = []
>>> for fruit in [ 'apple', 'orange', 'banana' ]:
... funcs.append(lambda: 'I like ' + fruit)
...
>>> for f in funcs:
... print f()
...
I like banana
I like banana
I like banana
Pythons Lambda löst den Namen der Variablen zum Zeitpunkt des Aufrufs auf, sodass sie zum Zeitpunkt der Ausführung zu "Frucht" (= "Banane") wird.
Ändern Sie Lambda: 'Ich mag' + Obst
in Lambda Frucht = Obst: 'Ich mag' + Obst
.
Ich denke, dass es Standard ist, funktional mit Funktionen höherer Ordnung zu lösen, aber wenn es ↑ ist, ist es gut, mit einem Einzeiler zu arbeiten. (^ ◇ ^)
>>> funcs = []
>>> for fruit in [ 'apple', 'orange', 'banana' ]:
... funcs.append(lambda fruit=fruit: 'I like ' + fruit)
...
>>> for f in funcs:
... print f()
...
I like apple
I like orange
I like banana
Recommended Posts