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,就去内置中找

原文地址:https://www.cnblogs.com/xuexianqi/p/13658528.html