Name resolution and the (wrong?) LEGB rule
rosuav at gmail.com
Thu Dec 8 13:14:50 EST 2016
On Fri, Dec 9, 2016 at 5:03 AM, Peter Otten <__peter__ at web.de> wrote:
>> The "usual optimization" is exactly what you describe: that different
>> bytecodes represent Local, Enclosing, and Global/Built-in scope
>> lookups. (Globals can be created or removed at run-time, so there's no
>> optimization possible there.) But in terms of language specifications,
>> the lookup rules are the same; it's just that the CPython compiler
>> takes advantage of information that it can see ("these are the only
>> locals for this function") to speed up execution.
> If it is only an optimization why doesn't a failing local lookup fall back
> to the global namespace?
Define "failing". Do you mean that this should print "outer"?
x = "outer"
x = "inner"
There are plenty of languages where this is true, but they work
because the defined scope of a variable is "from its declaration
although it's a bit bizarre in a few ways. The lookup doesn't fail; it
finds a local variable that doesn't have a value. At least, I'm pretty
sure that's how it works. Is there a language specification stating
More information about the Python-list