什么是命名空间
在python解释器开始执行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的关系记录下来,但是当遇到函数定义的时候,解释器只是把函数名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的,也就是说一开始的时候函数并没有执行,只有当函数被调用和访问的时候,解释器才会开辟内部空间存放函数内部声明的变量,随着函数执行完毕,这些函数内部变量占用的空间也会随着函数执行完毕而被清空。
存放名字和值的关系的空间就是命名空间,我们的变量就是存储在这片空间中的。
命名空间的分类
1、全局命名空间:直接在py文件中函数外声明的变量都存放在全局命名空间;
2、局部命名空间:在函数中声明的变量会存放在局部命名空间;
3、内置命名空间:存放python解释器为我们提供的函数,如int,str,list这些都存放在内置命名空间;
加载顺序:
1、内置命名空间
2、全局命名空间
3、局部命名空间(函数被执行的时候)
取值顺序:
1、局部命名空间
2、全局命名空间
3、内置命名空间
作用域
作用域就是作用范围,按照生效范围来看分为全局作用域和局部作用域。
全局作用域:包含内置命名空间和全局命名空间,在整个文件的任何位置都可以使用(遵循从上到下逐行执行);
局部作用域:在函数内部的命名空间;
我们可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息。
global 和 nonlocal
global用于声明一个全局变量,如果在函数内部表示引用某个全局变量。
def func(): global a a = 3 func() print(a)
>>>3 count = 1 def func2(): global count count = 2 func2() print(count)
>>>2
nonlocal用于在局部作用域中,对父级局部作用域或更外层局部作用域(非全局作用域)的变量的引用。
def func(): b = 2 def func2(): def func3(): nonlocal b b = 5 func3() func2() print(b) func() >>>5