什么是命名空间

  在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

 

posted on 2019-03-08 17:54  回忆唯U你  阅读(175)  评论(0编辑  收藏  举报