> 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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4