作用域
含义:
又叫命名空间,python 创建、改变、查找变量名的地方。
在代码中变量名被赋值的位置决定了这个变量名能被访问到的范围。
意味着
- 一个def内定义的变量名能被def内的代码访问到,不能在函数外部被引用
- def 内的变量名与def 之外的变量名并不冲突
-
三种作用域
一个变量在def 内赋值,被定位在这个函数内 -> 本地作用域
- 一个变量在一个嵌套的def中赋值,对于嵌套的函数来说,它是非本地的 -> nonlocal 自由变量
- 在def之外赋值,就是整个文件全局的 -> 全局
变量名解析:LEGB原则
变量名引用分三个作用域进行查找:首先是本地,之后是函数内,之后全局,最后 内置
默认下,变量名赋值会创建或者改变本地变量
闭包
含义
引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外
自由变量保存在:
闭包的 __closure__ 是一个cell 对象的元组
__closure__[0].cell_contents 保存闭包的自由变量