理解Python中的作用域规则


理解Python中的作用域规则


LEGB规则

L,Local - 在函数(deflambda)中以任何方式分配的名称,并且在该函数中未声明为全局。

E,Enclosing-function locals - 从内到外的任何和所有静态封闭函数(deflambda)的局部范围中的名称。

G,全局(模块) - 在模块文件的顶层分配的名称,或通过在文件中执行global语句def

B,内置(Python)的-名内置名称模块预先分配:open,range,SyntaxError,...

所以,在这种情况下

code1
class Foo:
   code2
   def spam.....
      code3
      for code4..:
       code5
       x()

for循环没有自己的命名空间。在LEGB顺序中,范围将是

  • L:本地,在def spam(中code3,code 4,code5)。

  • E:封闭功能,任何封闭功能(如果整个示例在另一个中def)

  • G:全球。x模块(code1)中是否有全局声明?

  • B:xPython中的任何内置函数。

x永远不会被发现code2