i
is 4
when your loop ends so i
is 4 for every lambda
.
If you print i
outside the loop you will see it is 4:
for i in range(5):
lambdas.append(lambda x: i * i * x)
print(i)
4
You are using a variable that is being updated throughout the loop, if you call the lambda inside the loop you would get what you were expecting.
for i in range(5):
lambdas.append(lambda x: i * i * x)
print(lambda x: i * i * x)(1)
0
1
4
9
16
The behaviour is what you would expect, i
is simply a variable like any other.
On a side note you could use a list comp to create your list:
lambdas = [lambda x,i=i: i * i * x for i in xrange(5)]