Reputation: 5287
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?
Upvotes: 3
Views: 753
Reputation: 77
range(l) is evaluated once, what is being updated is the value of l in the print statement.
Upvotes: 0
Reputation: 251355
The issue is not how often range
evaluates its argument, but how often for item in sequence
evaluates sequence
. The answer is once. When you write for i in range(l)
, range(l)
is evaluated once and that's it.
Upvotes: 3
Reputation: 1121446
No, the for
loop evaluates the iterable expression just once.
range()
is called once, and the for
loop then iterates over the result.
Quoting from the for
statement documentation:
The expression list is evaluated once; it should yield an iterable object.
emphasis mine.
Upvotes: 5