[Python-Dev] Using and binding relative names (was Re: PEP forBetter Control of Nested Lexical Scopes) (original) (raw)

Almann T. Goo almann.goo at gmail.com
Sun Feb 26 21🔞12 CET 2006


Would this apply to reading intermediate scopes without the global keyword?

Using a name from an enclosing scope without re-binding to it would not require the "global" keyword. This actually is the case today with "global" and accessing a name from the global scope versus re-binding to it--this would make "global" more general than explicitly overriding to the global scope.

How would you know you aren't in inadvertently masking a name in a function you call?

I think is really an issue with the name binding semantics in Python. There are benefits to not having variable declarations, but with assignment meaning bind locally, you can already shadow a name in a nested scope inadvertently today.

In most cases it will probably break something in an obvious way, but I suppose in some cases it won't be so obvious.

Having the "global" keyword semantics changed to be "lexically global" would break in the cases that "global" is used on a name within a nested scope that has an enclosing scope with the same name. I would suppose that actual instances in real code of this would be rare.

Consider:

x = 1 def f() : ... x = 2 ... def inner() : ... global x ... print x ... inner() ... f() 1

Under the proposed rules:

f() 2

PEP 227 also had backwards incompatibilities that were similar and I suggest handling them the same way by issuing a warning in these cases when the new semantics are not being used (i.e. no "from future").

-Almann

Almann T. Goo almann.goo at gmail.com



More information about the Python-Dev mailing list