名称空间和和作用域
一、什么是名称空间
名称空间就是用于存放变量名和变量值绑定的关系的地方
在程序执行期间,最多会有三层名称空间
1.内置名称空间
伴随python解释器的启动和关闭进而创建与销毁的空间,第一个被加载的空间
用来存放一些内建函数名,例如print()、len()等等
2.全局名称空间
伴随py文件的运行和结束进而创建与销毁的空间,是第二个被加载的空间
在py文件中顶格编写的代码都会存入到全局名称空间中
3.局部名称空间
伴随函数体代码的执行和结束进而创建与销毁的空间,是第三个被加载的空间
函数体代码运行之后的都称为局部名称空间

二、名字的查找顺序
1.如果处于局部名称空间
局部>>>全局>>>内置
2.如果处于全局内部空间
全局>>>内置
ps:在查找名字的过程中,先知道在自己处于哪一层空间
3.局部名称空间的嵌套
3.1 嵌套时由内而外依次查找
x= 111
def f1():
x = 222
def f2():
x = 333
def f3():
x = 444
print(x)
f3()
f2()
通过调用f1()执行所有的函数
3.2 函数在定义阶段的名字的查找顺序已经固定死了(特例)
print(x)
x = 444

三、作用域
作用域就是名称空间所能够作用的范围
在内置名称空间中:
程序任何阶段的任何位置都可以使用(全局有效)
在全局名称空间中:
程序任何阶段的任何位置都可以使用(全局有效)
在局部名称空间中:
一般情况下只在各自的局部空间有效
四、global与nooloca关键字的使用
global关键字
在局部空间中想要想要改变不可变类型的值,使它全局可用,可以使用关键字global

如果数据是可变类型,则可以直接修改不需要使用关键global
nonloca关键字
在内局部名称空间中修改外局部空间的数据,可以使用nonloca关键字

nonlocal会逐层的外部局部空间查找,如果找不到会报错
如果数据是可变类型,则可以不使用nonlocal

浙公网安备 33010602011771号