python中搜索变量的【LEGB】法则 2020-01-18(
2020-01-18 本文已影响0人
9_SooHyun
【LEGB】法则
L-Local:在本地函数内部搜索变量
E-Enclosing function:在外部嵌套函数(如闭包closure)内部搜索变量
G-Global:在函数定义的模块(即函数定义的.py文件)搜索全局变量
B-Builtin:搜索Python的内建变量
LEGB法则是python搜索变量的法则,举一个例子:
# this is test.py
# G-Global变量x=1
x = 1
def f1():
# E-Enclosing function变量x=2
x = 2
def f2():
# L-Local变量x=3
x = 3
return x
return f2
在上面的test.py中,真正需要x的地方只有一处——return x
那么,python执行到return x时,就会按照【LEGB】法则搜索这个x变量到底引用了哪一个值
- 在f2中,搜索到L-Local变量x=3,停止继续向外搜索
- 若f2中不存在L-Local变量x=3,则继续向外搜索,这时将在外层嵌套函数f1中搜索到E-Enclosing function变量x=2,停止搜索
- 若f2和f1中都未定义变量x,那么会继续向外搜索该模块下的全局变量,找到G-Global变量x=1
- 如果LEG都找不到变量,会再去python的B-Builtin变量中找