Scoping in Python 'for' loops Scoping in Python 'for' loops python python

Scoping in Python 'for' loops


The likeliest answer is that it just keeps the grammar simple, hasn't been a stumbling block for adoption, and many have been happy with not having to disambiguate the scope to which a name belongs when assigning to it within a loop construct. Variables are not declared within a scope, it is implied by the location of assignment statements. The global keyword exists just for this reason (to signify that assignment is done at a global scope).

Update

Here's a good discussion on the topic: http://mail.python.org/pipermail/python-ideas/2008-October/002109.html

Previous proposals to make for-loopvariables local to the loop havestumbled on the problem of existingcode that relies on the loop variablekeeping its value after exiting theloop, and it seems that this isregarded as a desirable feature.

In short, you can probably blame it on the Python community :P


Python does not have blocks, as do some other languages (such as C/C++ or Java). Therefore, scoping unit in Python is a function.


A really useful case for this is when using enumerate and you want the total count in the end:

for count, x in enumerate(someiterator, start=1):    dosomething(count, x)print "I did something {0} times".format(count)

Is this necessary? No. But, it sure is convenient.

Another thing to be aware of: in Python 2, variables in list comprehensions are leaked as well:

>>> [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> x9

But, the same does not apply to Python 3.