一、名称空间(存放名字/名称的空间)
如果再电脑上,有两份文件名字一样,如何?换个保存位置,放到不同的文件夹里→换个空间保存
在python中,如果名字一样?放到不同的空间里面去
名称空间的分类
1、内置/内建 名称空间:随着python解释器的启动就产生,python解释器关闭,就回收这个空间;是第一个产生的空间,只能产生一个;是用来存放一些内置/内建的名字的,比如一些内置函数的名字如print()等
2、全局名称空间:随着python的文件/程序执行就产生,执行结束就回收了这个空间;是第二个产生的而空间,只能产生一个;用来存放文件/程序中的一些名字,比如自己新定义的变量名称、函数名称、类名、模块名等
3、局部名称空间:随着函数的调用就产生,调用函数结束这个空间就回收;这个函数内部的名字就会被放到这个空间中去;是第三个产生的空间,可以产生任意个(运行了几个函数,就有几个)
1、名称空间的产生顺序:内置名称空间>>全局名称空间>>局部名称空间
2、回收顺序:局部名称空间<<全局名称空间<<全局名称空间
3、名字的查找顺序:由当前的名称空间一层一层往下面去找,一个名字必须在这三种空间中找到,如果都找不到就报错
二、作用域:(发生作用的区域)按照名称的作用范围的不同,将三种名称空间分为两种作用域
1、全局作用域:位于全局名称空间、内置/内建名称空间中的名字,都属于全局作用域;这个作用域里的名字在文件所有的位置都可以使用;
2、局部作用域:位于局部名称空间中的名字都属于局部作用域;这个作用域里面的名字只有在这个局部空间中能使用,其他局部空间或全局空间都不能用;函数内部的名字只能在函数内部使用,在其他地方都不能使用
三、global:局部改全局:就要在这个名字之前加一个global(只能改全局,不能改局部,外一层的局部都不能改),换行更改;不是说只要在局部更改全部的名字就一定要加global,而是在局部要更改这个名字会导致内存地址发生变化,才需要加。
global 名字
名字(后写更改的内容)
四、nonlocal:局部改局部:改外面的一层(局部层,不是全局)(不会将外面的所有的局部层都改)用nonlocl;在函数里面还嵌套了函数,如果想在最里面那一层局部函数更改外面那一层局部函数的值,并且这个给更改会造成名字的内存地址发生变化,才需要加
nonlocal 名字
名字(后面写更改的内容)



