>>> 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
Le lambda de Python résout le nom de la variable au moment de l'appel, donc il devient "fruit" (= 'banana') au moment de l'exécution.
Remplacez lambda: 'j'aime' + fruit 'par
lambda fruit = fruit:' j'aime '+ fruit' '.
Je pense qu'il est standard de résoudre fonctionnellement avec des fonctions d'ordre supérieur, mais si c'est ↑, il est bon d'utiliser une seule ligne. (^ ◇ ^)
>>> 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