l
is passed as an argument to range
function whose value is modified inside for
loop, but the loop is going for 10
times instead of 5
.
i = 0
l = 10
for i in range(l):
print i,l
l = l-1
The output is
0 10
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1
While I expected
0 10
1 9
2 8
3 7
4 6
Does range()
evaluates value for the first time only or something else is the reason?
range(l) is evaluated once, what is being updated is the value of l in the print statement.
The issue is not how often
range
evaluates its argument, but how oftenfor item in sequence
evaluatessequence
. The answer is once. When you writefor i in range(l)
,range(l)
is evaluated once and that's it.No, the
for
loop evaluates the iterable expression just once.range()
is called once, and thefor
loop then iterates over the result.Quoting from the
for
statement documentation:emphasis mine.