What exactly are the Python scoping rules?
If I have some code:
Actually, a concise rule for Python Scope resolution, from Learning Python, 3rd. Ed.. (These rules are specific to variable names, not attributes. If you reference it without a period, these rules apply)
L, Local — Names assigned in any way within a function (
lambda)), and not declared global in that function.
E, Enclosing function locals — Name in the local scope of any and all enclosing functions (
lambda), from inner to outer.
G, Global (module) — Names assigned at the top-level of a module file, or declared global in a
def within the file.
B, Built-in (Python) — Names preassigned in the built-in names module :
So, in the case of
code1 class Foo: code2 def spam..... code3 for code4..: code5 x()
The for loop does not have its own namespace. In LEGB order, the scopes would be
L : local, in the current def.
E : Enclosed function, any enclosing functions (if def spam was in another def)
G : Global. Were there any declared globally in the module?
B : Any builtin x() in Python.