一、什么是名称空间?
1.名称空间:存放名字的地方,有三种名称空间(之前遗留的问题: 例如: x=1,1存在与内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方)
2.名称空间分为三大类:
内置名称空间:存放的是python解释器自带的名字
生产:python解释器的启动则产生
销毁:python解释器关闭则销毁
全局名称空间:在顶级定义的名字
x=1
if True:
y=2
while True:
while True:
while True:
z=3
def func():
pass
产生:执行python程序时产生
销毁:python程序执行完毕后则销毁
局部名称空间:在函数内定义的名字
def foo():
m=100
foo()
产生:在函数调用时临时产生
销毁:在函数diadiaoyo调用后则销毁
三种名称空间的产生的先后顺序:内置=》全局=》局部
查找名字的顺序:从当前位置往外一层一层的查找
如果当前在局部名称空间:局部=》全局=》内置
如果当前在全局名称空间: 全局=》内置
1 # len=111 2 # def foo(): 3 # # len=222 4 # print(len) 5 # len=111 6 # foo() 7 8 9 # x=0 10 def f1(): 11 # x=1 12 def f2(): 13 # x=2 14 def f3(): 15 # x=3 16 print(x) 17 f3() 18 f2() 19 f1() 20 21 22 def foo1(): 23 def foo2(): 24 def foo3(): 25 print(x)
**************************************************************************************************
作用域即范围
全局范围(内置名称空间与全局名称空间属于该范围); 全局存活,全局有效
局部范围(局部名称空间属于该范围);临时存活,局部有效
2.作用域关系是在函数定义阶段就已经国定的,与函数的调用位置无关,如下:
1 x=1 2 def f1(): 3 def f2(): 4 print(x) 5 return f2 6 x=100 7 def f3(func): 8 x=2 9 func() 10 x=10000 11 f3(f1())
3.查看作用域:globals(),locals()
LEGB代表名字查找顺序:locals=》enclosing function =>globals=>_builtins_
locals是函数内名字空间,包括局部变量和形参
enclosing 为外部嵌套函数的名字空间(闭包中常见)
globals 全局变量,函数定义所在模块的名字空间
builtins 内置模块的名字空间