Rustom Mody wrote:
A 'for' introduces a scope:
No, it doesn't!
x = 42
for x in [1,2,3]:
... print x
...
1
2
3
No sign of the 42 --v ie the outer x -- inside because of scope
You're right that there's no sign of the 42, but it's
*not* because of scope, as you'll see if you do one
more print:
>>> print x
3
And so we can do:
x = [1,2,3]
for x in x:
... print x
...
1
2
3
Again, if you print x after the loop has finished,
you'll find that it's no longer bound to the original
list. This is because Python's for-loop does *not*
introduce a new scope -- there's only one x, and
the for-loop is sharing it with the rest of the code.
The real question is why the for-loop works in *spite*
of this fact.
The answer is that the for-loop machinery keeps an
internal reference to the list being iterated over,
so once the loop has started, it doesn't matter what
x is bound to any more.
--
Greg
--
https://mail.python.org/mailman/listinfo/python-list