名称空间和和作用域

一、什么是名称空间

    名称空间就是用于存放变量名和变量值绑定的关系的地方

    在程序执行期间,最多会有三层名称空间

   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

  

 

posted @ 2021-11-15 18:54  椰子皮0oo0  阅读(91)  评论(0)    收藏  举报
1