Shashwat Kumar
Shashwat Kumar

Reputation: 5287

Does range() not evaluate its argument every time?

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

Answers (3)

Krishna
Krishna

Reputation: 77

range(l) is evaluated once, what is being updated is the value of l in the print statement.

Upvotes: 0

BrenBarn
BrenBarn

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

Martijn Pieters
Martijn Pieters

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

Related Questions