Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't "i" be manipulated inside for-loop [duplicate]

Why does:

for i in range(10):
 i += 1
 print(i)

return:

1
2
3
4
5
6
7
8
9
10

instead of:

2
4
6
8
10

?

Here would be some details if any more were necessary.

like image 715
Horst Avatar asked Dec 08 '22 12:12

Horst


1 Answers

for i in range(10):
    i += 1
    print(i)

is equivalent to

iterator = iter(range(10))
try:
    while True:
        i = next(iterator)
        i += 1
        print(i)
except StopIteration:
    pass

The iterator that iter(range(10)) produces will yield values 0, 1, 2... 8 and 9 each time next is called with it, then raise StopIteration on the 11th call.

Thus, you can see that i gets overwritten in each iteration with a new value from the range(10), and not incremented as one would see in e.g. C-style for loop.

like image 123
Amadan Avatar answered Dec 18 '22 09:12

Amadan