名称空间
又名name space,名称空间就是存放变量名与变量值绑定关系的地方
名称空间共3种,分别如下
- locals: 是函数内的名称空间,包括局部变量和形参(locals打印当前所在名称空间里的所有局部变量)
- globals: 全局变量,函数定义所在模块的名字空间(globals打印脚本所有变量)
- builtins: 内置模块的名字空间
不同变量的作用域不同就是由这个变量所在的命名空间决定的。
作用域即范围
- 全局范围:全局存活,全局有效
- 局部范围:临时存活,局部有效
查看作用域方法 globals(),locals()
有了名称空间,才有了作用域
作用域(scope)查找顺序
level = 'L0' n = 22 def func(): level = 'L1' n = 33 print(locals()) # level = L1, n = 33 def outer(): n = 44 level = 'L2' print(locals(),n) # level = 'L2' , n = 44 def inner(): level = 'L3' print(locals(),n) #此外打印的n是多少?44 inner() outer() func()
输出:
{'level': 'L1', 'n': 33}
{'level': 'L2', 'n': 44} 44
{'level': 'L3', 'n': 44} 44
问题:在inner()里的打印的n的值是多少?44
LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
- locals 是函数内的名字空间,包括局部变量和形参
- enclosing 外部嵌套函数的名字空间(相邻的上一级)
- globals 全局变量,函数定义所在模块的名字空间
- builtins 内置模块的名字空间