名称空间
名称空间是对栈区的划分,因为名称空间的存在,可以在栈区存放相同的名字
名称空间的种类
- 内置名称空间
存放python解释器内置的名字
存活周期:python解释器运行期间
- 全局名称空间
存放非函数内、非内置的名字
存活周期:文件执行期间
- 局部名称空间
存放函数内定义的名字
存活周期:调用函数时存活,调用结束则销毁
- 名称空间的加载顺序:
内置名称>全局名称空间>局部名称空间
- 销毁顺序:
局部名称空间>全局名称空间>内置名称空间
- 名字查找优先级:
当前所在名称空间向上
局部名称空间>全局名称空间>内置名称空间
作用域
全局作用域:内置名称空间、全局名称空间
作用范围:
- 全局存活
- 全局有效,被所有函数共享
局部作用域:局部名称空间的名字
作用范围:
- 临时存活
- 局部有效:函数内有效
gloab与nonlocal
如果局部想要修改全局的值(不可变类型),需要使用global
x = 222 def func(): global x x = 111
- nonlocal
函数嵌套时,修改最外边函数的值