命名空间是名称到对象的映射。命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。
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