On 30/09/2016 13:33, Steve D'Aprano wrote:
On Fri, 30 Sep 2016 05:29 am, namenobodywa...@gmail.com wrote:

i've had a nodding acquaintance with python for some time, and all along i
assumed that for-loops got a namespace of their own;

It would be terribly inconvenient and surprising for if...else blocks to be
separate namespaces:

a = 1
if condition:
    print(a)  # UnboundLocalError: local 'a' referenced before assignment
    a += 1


For-loops are no different. Making them their own namespace is a very
strange thing to do, it would mean you couldn't re-bind a value inside a
for-loop:

count = 0
for x in sequence:
    count += 1
    # raises UnboundLocalError: local 'count' referenced before assignment

It can make sense for 'x' to be local to this for-loop block (everything else is at it works now), and independent of any x's in outer blocks. It means being able to do stuff like this:

   for x in a:
     for x in b:
        pass
     pass     # outer x still has its value

And any even more outer x's are not affected. With 'for', especially one inside a list-comp, often you just need some throwaway index variable without worrying if it will clash with an existing local.

But it's not useful enough I think to bother changing now. Or even when the language was designed.

--
Bartc

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to