On Sat, Oct 1, 2016 at 3:03 AM, Brendan Abel <007bren...@gmail.com> wrote:
>> 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
>
> --------------
>
> That's generally not how nested scopes work, you could still reference
> objects in the outer scope from the inner scope, but the outer scope
> couldn't reference objects in the inner scope

The trouble is that, absent some sort of declaration, there's no way
for the compiler to know whether 'count' and 'a' are supposed to be
new variables in the inner scope, or the same variable as the one in
the next scope out. In Python, declarations are used when you rebind
nonlocal or global names, so these examples would have to be written
thus:

a = 1
if condition:
    nonlocal a
    print(a)
    a += 1

count = 0
for x in sequence:
    nonlocal count
    count += 1

I don't think we want that. :)

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

Reply via email to