作用域(全局作用域和局部作用域)


作用域---->作用范围(作用域又叫作用范围,在什么范围内有效)

一、全局作用域:包含内置名称空间、全局名称空间

  1.存活周期:该范围内的名字全局存活(除非被删除,否则在整个文件执行过程中存活)

  2.全局有效,在任意位置都可以使用,被所有函数共享

二、局部作用域:包含局部名称空间

  1.存活周期:该范围内的名字临时存活(在函数调用时临时生成,调用结束后就释放)

  2.局部有效,只能在函数内使用

三、global与nonlocal

  1.如果在局部中想要修改全局的名字所对应的值,那么就需要global,主要针对不可变类型

    示例1:global主要是针对不可变类型

       x = 100  # 全局名称空间(也是全局作用域)

       def func():

        global x  # 使用global,表示修改全局作用域中的x

        x = 200  # 在函数内,表示为局部名称空间(也是局部作用域)

       func()

       print(x)  # 输出结果为:200,x=200为局部作用域,也是局部名称空间,这里使用了global(表示修改全局中的),所以修改了全局中的x = 100

    示例2:示例1中主要是针对不可变类型的,示例2针对可变类型

      x = []  # 全局名称空间,声明的是一个数组

      def func():

        a.append(111)  # 直接对数组进行添加操作,对于可变类型的就不用使用global了,因为在函数中可以直接对可变类型进行操作

      func()

      print(x)  # 输出结果为:[111]

  2.修改函数外层函数包含的名字对于的值(与global一样针对不可变类型),这是需要使用nonlocal

   示例1:针对不可变类型

      x = 100  # 全局名称空间

      def func():

        x = 200  # 局部名称空间

        def func1():

          nonlocal x  # 表示修改该层函数上层函数的x,如果有三层函数,找上层表示先找第二层,如果没有找到则会找第一层,如果还没有就会报错,不会找全局

          x = 300

        func1()

        print(x)  # 输出结果为:300,x =300为局部作用域,这里使用了nonlocal(表示修改func1上一层中的名称对应的值),所以修改了x=200的值

      func()

    示例2:针对可变类型时,与global一样的,直接进行修改即可,不适用nonlocal

      

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM