名称空间又名name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?称空间正是存放名字x与1绑定关系的地方。python
Python里面有不少名字空间,每一个地方都有本身的名字空间,互不打扰,不一样空间中的两个相同名字的变量之间没有任何关系。编程
名称空间有4种:LEGB函数
locals
:函数内部的名字空间,通常包括函数的局部变量以及形式参数。enclosing function
:在嵌套函数中外部函数的名字空间,若fun2嵌套在fun1里,对fun2来讲,fun1的名字空间就enclosing。globals
:当前的模块空间,模块就是一些py文件。也就是说,globals()相似全局变量。builtins
:内置模块空间,也就是内置变量或者内置函数的名字空间。不一样变量的做用域不一样就是由这个变量所在的名称空间所决定的。ui
做用域即范围spa
查看做用域方法:globals()
,locals()
code
做用域查找顺序内存
当程序引用某个变量的名字时,就会从当前名字空间开始搜索。搜索顺序规则即是:LEGB。即locals -> enclosing function -> globals ->builtins。一层一层的查找,找到了以后,便中止搜索,若是最后没有找到,则抛出NameError的异常。作用域
level = 'L0' n = 22 def func(): level = 'L1' n = 33 print(locals()) def outer(): n = 44 level = 'L2' print("outer:",locals(),n) def inner(): level = 'L3' print("inner:",locals(),n) #此外打印的n是多少? inner() outer() func()
输出io
{'n': 33, 'level': 'L1'} outer: {'level': 'L2', 'n': 44} 44 inner: {'level': 'L3', 'n': 44} 44