一: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,就去內置中找