Python global、nonlocal

先看个小栗子

a = 1
def func1():
    print(a) # 1
func1()

#############################
b = 100
def func2():
    b += 1 # 报错 UnboundLocalError: local variable 'b' referenced before assignment
func2()

局部作用域对全局作用域的变量(此变量只能是不可变的数据类型只能进行引用,而不能进行改变,只要改变就会报错,但是有些时候,我们程序中会遇到局部作用域去改变全局作用域的一些变量的需求,这怎么做呢?这就得用到关键字 global。

global 作用

  • 1.声明一个全局变量。

      def func():
          global a
          a = 3
      func()
      print(a)  # 3
    
  • 2.在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

      count = 1
      def search():
          global count
          count = 2
      search()
      print(count)  # 2
    

nonlocal 作用

nonlocal 是 Python3.x 新加的功能,与 global 用法差不多,就是在局部作用域中如果想对父级作用域的变量进行改变时,需要用到 nonlocal。

  • 1.不能更改全局变量。

      count = 666
      
      
      def func1():
          def func2():
              nonlocal count # SyntaxError: no binding for nonlocal 'count' found
              count += 1
              print(count)
      
          func2()
      
      
      func1()
    
  • 2.在局部作用域中,对父级作用域(或者更外层作用域,非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

      def func1():
          count = 666
      
          def inner():
              print(count)
      
              def func2():
                  nonlocal count
                  count += 1
                  print('func2', count)
      
              func2()
              print('inner', count)
      
          inner()
          print('func1', count)
      
      
      func1()
      # 运行结果:
      # 666
      # # func2 667
      # # inner 667
      # # func1 667
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值