python——global与nonlocal关键字

global and nonlocal


使用这两个关键字之前,我们先了解一下什么是变量的作用域
  • 变量的作用域:是指一个变量所产生的作用范围,也就是说在哪一个范围内变量能够被解释器所识别。
  • 变量分为:全局变量and局部变量
  • 全局变量的作用域:全局变量一般声明在函数的外部。整个.py文件内都可以使用,都可以被识别。
  • 局部变量的作用域:只能在函数的内部使用,超出范围,变量就不能再使用

> global关键字

用来在函数或其他局部作用域中使用全局变量,如果不修改全局变量也可以不使用global关键字。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量
number = 0 
def small_test():
    number += 1
    print (number)
small_test()

UnboundLocalError: local variable ‘number’ referenced before assignment
局部变量错误:局部变量“number”在赋值前被引用

如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有gcount的定义和赋值,所以报错。

如果在局部要对全局变量修改,需要在局部也要先声明该全局变量(如下代码)
number = 0 
def small_test():
    global number    # 声明变量number为全局变量
    number += 1
    print (number)   # 1
small_test()
print(number)        # 1

在局部如果不修改全局变量,则可以正常使用全局变量(如下代码)
number = 0
def small_test():
    print(number)
small_test()

> nonlocal关键字

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量,修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。
def make_counter(): 
    number = 0 
    def counter(): 
        nonlocal number 
        number += 1 
        return number 
    return counter 
def small_test(): 
  m = make_counter() 
  print(m())   	# 1
  print(m())	# 2
  print(m())	# 3
  print(m())	# 4
small_test()

总结

  • global
  1. global 表示将变量声明为全局变量
  2. 在嵌套函数中,使用父级函数中的变量,只能在子函数内引用,如果要在子函数内修改,必须在子函数里面声明 “global 变量”,表明是修改外面的全局变量
  3. global 定义的变量,表明其作用域在局部以外,即局部函数执行完之后,不销毁函数内部以global定义的变量
  • nonlocal
  1. nonlocal 表示将变量声明为外层变量(外层函数的局部变量,而且不能是全局变量)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值