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