i 4 when your loop ends so i is 4 for each lambda .
If you type i outside the loop, you will see that it is 4:
for i in range(5): lambdas.append(lambda x: i * i * x) print(i) 4
You use a variable that is updated throughout the loop, if you call a lambda inside the loop, you will get what you expect.
for i in range(5): lambdas.append(lambda x: i * i * x) print(lambda x: i * i * x)(1) 0 1 4 9 16
Behavior is what you expect, i is just a variable, like any other.
On a side note, you can use the comp list to create your list:
lambdas = [lambda x,i=i: i * i * x for i in xrange(5)]
Padraic cunningham
source share