【python】命名空间、作用域和函数嵌套

1、命名空间: 当程序执行时将变量与值得对应关系存放在一个空间中

     临时命名空间:这个空间随着函数执行结束而消失

命名空间分类:

            1. 内置命名空间: 在python解释器内部运行时的变量函数,如内置函数

            2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数

            3. 局部命名空间: 在函数内部声明的变量和函数.

 

2、作用域:

            1.全局作用域:内置+全局

            2.局部作用域:局部(临时)命名空间

        #只有模块,函数,类,lambda 会引入新作用域

 

        globals() 查看全局作用域中的所有名字和值

        locals() 查看当前作用域中的所有名字和值

3、函数的嵌套:

   def func1():-----------1

            print("赵")-----------3

            def func2():----4

                print("钱")-------7

                def func3():------8

                    print("孙")------10

                print("李")-------9

                func3()

            print("周")------------5

            func2()-----------6

        func1()  ---------2 

        #只有调用的时候才有输出,函数声明时整体函数体先不用看,不执行

        #执行结果: 赵  周  钱  李  孙

4、关键字gobal 和nonlocal 

 gobal :在函数内部引入全局变量或修改,还可以给局部变量升华成全局变量

 nonlocal: 在函数内部,内层函数引入外层函数的局部变量,不可引入全局变量会报错

        如:a = 5

            def func1():

                #gobal a----------引入全局变量

                a += 1

                print(a)

            func1()------------会报错,因a是全局变量,应用gobal引入

            print(a)---------这时a已发生了改变

    

        如:def wrapper():

                a = 1

                def inner():

                    #nonlocal  a------引入局部变量

                    a += 1

                    print(a)

                inner()

            wrapper()

原文地址:https://www.cnblogs.com/xlzhangq/p/13210942.html