(1)最内嵌套作用域规则:由一个赋值语句引进的名字在这个赋值语句所在的作用域里是可见(起作用)的,而且在其内部嵌套的每个作用域里也可见,除非它被嵌套于内部的,引进同样名字的另一条赋值语句所遮蔽/覆盖。
(2)LEGB:符号表的搜索顺序是Local -> Enclosing Function -> Global -> Built-in
例如(下面实例会出错):
------------------------------------------
>>> x=10
>>> def f():
... print(x)
... x+=1
>>> f()
Traceback (most recent call last):
File "
File "
UnboundLocalError: local variable 'x' referenced before assignment
>>>
---------------------------------------------
为什么会出错呢?
因为在函数f()中出现了变量x+=1,编译器会认为x属于局部变量(local),根据LEGB规则,先搜索local变量,则在print(x)语句时候,局部变量 x还没有赋值,故出现下面提示信息:
UnboundLocalError: local variable 'x' referenced before assignment