|名称空间
名称空间又名 name space
顾名思义就是存放名字的地方,那名称空间又存什么名字呢?
举例说明,若变量a=100,100存放于内存中,那变量的名字a存放在哪里呢?
名称空间正是存放变量名字a与100绑定关系的地方。
python里面有很多名字空间,每个地方都有自己的名字空间互不干扰,不同空间中的两个相同名字的变量之间没有任何联系。

|名称空间有4种
locals
函数内部的名字空间,一般包括函数的局部变量以及形式参数
enclosing function
在嵌套函数中外部函数的名字空间,若f2函数嵌套在f1函数中,对f2来说,f1的名字空间就是enclosing
globals
当前的模块空间,模块就是一些py文件,也就是说 globals是全局变量
builtins
内置模块空间,也就是内置变量或者内置函数的名字空间, print(dir(__builtins__))可查看包含的值

不同变量的作用域不同就是由这个变量所在的名称空间决定的
作用域即范围
全局范围:全局存活,全局有效
局部范围:临时存活,局部有效
查看作用域方法
gobals 看全局
localsl 看局部
查询顺序
LEGB
即:locals--> enclosing function-->globals-->builtins
案例说明
level1 = "global" age = 11 def func(): level2 = "local" age = 22 print("func:", locals(), age) def outer(): level3 = "outer" age = 33 print("outer:", locals(), age) def inner(): level4 = "inner" age = 44 print("inner:", locals(), age) inner() outer() func() print(age)

当inner函数中没有定义age

当outer函数中没有定义age

只有全局变量有定义age

当全局也没有定义时,此时替换变量为Python内置的值

一分钟学会LEGB,是不是做到了,哈哈哈。