Python的LEGB规则
一:LEGB含义解释
字母 | 英语 | 释义 | 简称 | 作用空间 |
---|---|---|---|---|
L | Local(function) | 当前函数内的作用域 | 局部作用域 | 局部 |
E | Enclosing Functions Locals | 外部嵌套函数的作用域 | 嵌套作用域 | 局部 |
G | Global(module) | 函数外部所在的命名空间 | 全局作用域 | 全局 |
B | Built In(python) | Python内置模块的命名空间 | 内建作用域 | 内置 |
寻找变量的调用顺序,就是采用的LEGB原则(就近原则)
寻找顺序:从下往上、从里往外
局部变量:
函数内部的变量(局部命名空间)
全局变量:
函数内部和外部(全局命名空间)
(1)内部函数可以直接在函数外部调用么? 不行!
(2)调用外部函数后,内部函数可以在函数外部调用吗 不行!
(3)内部函数可以在函数内部调用吗 可以
(4)内部函数在函数内部调用时,是否有先后顺序 有先后顺序
二:查找顺序
以foo()
内部的print(a)
为例:
1.如果foo()
函数内部有a这个变量,那么a这个变量就是局部的
2.如果foo()函数内,没有这个变量,那么就会去找该函数外层的函数func()中,有没有a这个变量,如果有,那么这个a就是闭包的
3.如果func()中没有变量a,那么就会去最外层的全局变量找
4.如果全局变量没有a,就去内置中找