名称空间
又名 name space。
说明:若变量 x=1, 1存放于内存中,那名字x存放在哪里?
名称空间正是存放名字x与1绑定关系的地方
名称空间共三种:
- locals: 是函数内的名称空间,包括局部变量和形参
- globals: 全局变量,函数定义所在的模块的名字空间
- builtins: 内置模块的名字空间
不同变量的作用域不同,就是由于这个变量所在的命名空间决定的
作用域的范围
- 全局范围:全局存活,全局有效
- 局部范围:临时存活,局部有效
查看作用域的方法 globals(),locals(),dir(__builtins__)
作用域的查找顺序
1 level = 'L0' 2 n = 22 3 4 5 def func(): 6 level = 'L1' 7 n = 33 8 print(locals()) 9 10 def outer(): 11 n = 44 12 level = 'L2' 13 print(locals(),n) 14 15 def inner(): 16 level = 'L3' 17 print(locals(),n) #此外打印的n是多少? 18 inner() 19 outer() 20 21 22 func()
问题:在inner()里的打印的n的值是多少?
LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
- locals 是函数内的名字空间,包括局部变量和形参
- enclosing 外部嵌套函数的名字空间
- globals 全局变量,函数定义所在模块的名字空间
- builtins 内置模块的名字空间