Python的nonlocal与global关键字

nonlocalglobal是Python中用于在函数内部访问外部作用域变量的关键字。

一、nonlocal关键字

nonlocal用于在嵌套函数中修改外部函数的局部变量。当在一个函数内部定义了另一个函数,并且内部函数想要修改外部函数的局部变量时,可以使用nonlocal关键字。

示例代码:

def outer():
    x = 10

    def inner():
        nonlocal x
        x = 20

    inner()
    print(x)  # 输出:20

outer()

在上述代码中,inner()函数位于outer()函数内部,并且想要修改outer()函数中的局部变量x。通过使用nonlocal关键字,内部函数可以访问并修改外部函数的局部变量。

nonlocal关键字只能作用域局部变量,且始终找离当前最近的上层局部作用域中的变量。

a = 1
def outer():
    nonlocal a
    a = 2
outer()
print(a)

结果:

 原因分析:nonlocal关键字是能作用域局部变量,当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,结果没找着,报错。

a = 1
def outer():
    global a
    a = 2
    def inner():
        nonlocal a
        a = 3
    inner()
    print(a)
outer()
print(a)

结果:报错  SyntaxError: no binding for nonlocal 'a' found,

原因分析:当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,此时外层局部作用域虽然能找到变量a,但是这找到的 这个a 已经被global声明为全局变量了,所以报错。

a = 1
def outer(): 
    a = 2
    def inner():
        nonlocal a
        a = 3
        def inner2():
            print(a)
        inner2()
        print(a)
    inner()
    print(a)
outer()
print(a)

二、global关键字

global用于在函数内部访问和修改全局变量。当在函数内部想要修改全局变量的值时,可以使用global关键字。

示例代码:

x = 10

def modify_global():
    global x
    x = 20

modify_global()
print(x)  # 输出:20

在上述代码中,modify_global()函数想要修改全局变量x的值。通过使用global关键字,函数内部可以访问并修改全局变量。

三、总结

  • nonlocal关键字用于在嵌套函数中访问和修改外部函数的局部变量。
  • global关键字用于在函数内部访问和修改全局变量。

需要注意的是,使用 nonlocal 和 global 关键字时,要确保在使用之前已经有对应的变量存在。否则,会引发 NameError 异常。此外,过度使用 global 和 nonlocal 可能会导致代码可读性和维护性的下降,因此应谨慎使用,并优先考虑使用函数参数和返回值来进行变量传递和修改。

参考:

python 函数嵌套和nonlocal关键字_只待风起的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值