首页 > 其他 > 详细

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

时间:2021-01-18 09:25:00      阅读:45      评论:0      收藏:0      [点我收藏+]

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

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

  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

      

  

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

原文:https://www.cnblogs.com/xialiang37/p/14290860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!