名称空间和作用域
名称空间相关:
1.名称空间Namespaces:指的是存放名字和值的内存地址绑定关系的的地方(内存空间)
2.名称空间可以被分为三大类:
内置名称空间:存放Python解释器自带的名字
产生:Python解释器启动的时候则产生
销毁:Python解释器结束运行销毁
全局名称空间:在文件内定格定义的变量和函数名(包含流程控制和定格定定义的函数名)
产生:执行Python程序时产生
销毁:Python程序执行完成时结束
局部名称空间:函数内部定义的名字的空间
产生:调用函数时产生
销毁:函数调用结束时结束
三种名称空间的产生的先后顺序:内置名称空间---》全局名称空间---》局部名称空间
查找名字的顺序:当前顺序往外一层层的寻找
如果当前在局部空间:局部--》全局--》内置
如果在全局名称空间:全局--》内置
x=0#全局 def f1(): # x=1#f1局部名称 def f2(): # x=2#f1下的f2局部名称空间 def f3(): # x=3#f1下的f2下f3的局部内存空间 print(x) f3() f2() f1()
作用域:指的是作用的范围
全局作用域:包含内置与全局名称空间的名称
特点:全局存活,全局有效
局部作用域:包含局部名称空间的名字
特点:临时存活,局部有效
重点:
作用域关系是在函数定义阶段就已经固定死了,与调用位置无关。
范例一:
def f1(): print(xxx)#定义函数处开始寻找,再一层一层向外查找 xxx=111 def f2(): xxx=222 f1()#与调用的位置无关 f2() #111
范例二:
xxx=111 def f1(): print(xxx) # xxx=222#当要调用同级名称,先定义在使用,这样会报错 yyy=222 print(yyy) f1()