I ran this block of code and the output was surprising. I know that I am reusing i, my question is why doesn't the loop exit after the first iteration since i is reassigned!
Code:
for i in range(3):
print '====='
print 'Outer I: ', i
print '====='
for j in range(2):
print 'J', j
for i in range(5):
print 'Inner I', i
print '====='
print 'Outer I Again: ', i
print '====='
Output:
=====
Outer I: 0
=====
J 0
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
J 1
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
=====
Outer I Again: 4
=====
=====
Outer I: 1
=====
J 0
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
J 1
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
=====
Outer I Again: 4
=====
=====
Outer I: 2
=====
J 0
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
J 1
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
=====
Outer I Again: 4
Here are things that are confusing:
- I would expect the loop to break after the first iteration, but it does not.
- For the same reason, the first print statement "Outer I" prints the correct value of i.
- The second outer print statement "Outer I Again" prints the wrong value.
I'm running this on Python 2.7 with CPython.