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