函数进阶之命名空间
命名空间是名称到对象的映射。命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。
x = 1
在内存中是{x:4304947712} x对应的是1的内存地址
名称空间分三种
locals: 是函数内的名称空间,包括局部变量和形参。
globals: 全局变量,函数定义所在模块的名字空间,也就是打印出这个程序的所有变量。
builtins: 内置模块的名字空间
不同变量的作用域不同就是由这个变量所在的命名空间决定的。作用域即范围
全局范围:全局存活,全局有效。
局部范围: 临时存活,局部有效。
查看作用域方法 globals(),locals()
作用域的查找顺序
LEGB
L:locals
E: enclosing 相邻的上级
G: globals
B: builtins
例子
n = 10 def func(): n = 20 print('func', n) def func2(): n = 30 print('func2', n) def func3(): print('func3:', n) func3() func2() func() # func 20 # func2 30 # func3: 30