#局部变量:函数内部的变量是局部变量,作用域仅在函数内部可见(局部命名空间)
#全局变量:函数外部的变量是全局变量,作用域横跨整个文件(全局命名空间)
#内置函数:内建命名空间
#global :关键字:声明全局变量获修改全局变量
#nonlocal :关键字:修改局部变量(当前函数上一层的局部变量)
#locals() :返回字典,获取当前作用域的所有内容
如果在函数里:获取locals()调用之前,该作用域出现的内容
如果在函数外:获取locals()打印返回值之前,该作用域出现的内容
#globals() :返回字典,获取全局作用域的所有内容
如果在函数里: 获取globals()调用之前,全局作用域出现的内容
如果在函数外: 获取globals()打印返回值之前,全局作用域出现的内容
```
#找寻变量的调用顺序采用LEGB原则(即就近原则)
B —— Builtin(Python);Python内置模块的命名空间 (内建作用域)
G —— Global(module); 函数外部所在的命名空间 (全局作用域)
E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
L —— Local(function);当前函数内的作用域 (局部作用域)
依据就近原则,从下往上 从里向外 依次寻找
```
### 内部函数
```
(1)内部函数可以直接在函数外部调用么
(2)调用外部函数后,内部函数可以在函数外部调用吗
(3)内部函数可以在函数内部调用吗
(4)内部函数在函数内部调用时,是否有先后顺序
```
### 闭包
``` # 获取闭包函数使用的变量 __closure__ , cell_contents
闭包的定义: 内函数使用外函数的局部变量,并且外函数将内函数返回出来的方法叫闭包, 返回的内函数叫 闭包函数.
闭包的特点: 内函数使用了外函数的局部变量,外函数的局部变量与内函数发生绑定,延长该变量的生命周期 (实际内存给它存储了这个值,暂时不释放)
闭包的意义: 闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用.外部无法访问. ```