当前位置:   article > 正文

Python之关键字nonlocal_python nonlocal

python nonlocal

nonlocal: 非局部的
nonlocal 可以使你在嵌套函数内部修改外层(非全局)作用域的变量

在函数的内部,我们在构建一个子函数去影响父函数变量的值,这样的行为,就是闭包。  
nonlocal是Python3新增的作用域关键词。  
在Python2中,闭包函数可以读取到父函数的变量,但无法修改该变量的值。为此,我们经常要把变量声明为global全局变量,但这就打破了闭包的性质。

为了解决这个问题,Python3引入了nonlocal。通过在闭包函数中声明nonlocal变量,就可以在闭包函数内访问和修改父函数内的同名变量。

一个没有使用 nonlocal 的例子

def outer_function():
    a = 20
    def inner_function():
        a = 30
        print("Inner function: ", a)
    inner_function()
    print("Outer function: ", a)

outer_function()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
'
运行

输出:
Inner function: 30
Outer function: 20

使用 nonlocal 关键字

def outer_function():
    a = 20
    def inner_function():
        nonlocal a
        a = 30
        print("Inner function: ", a)
    inner_function()
    print("Outer function: ", a)

outer_function()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
'
运行

输出
Inner function: 30
Outer function: 30

需要注意的是,nonlocal 不会影响全局作用域中的变量。全局变量需要使用 global 关键字来引用。

总结:

  • nonlocal 用于嵌套函数中,用于在嵌套函数里引用最近的外层函数作用域中的变量。
  • nonlocal 不会影响到全局作用域中的变量,只影响最近的外层作用域(也就是包含 nonlocal 的函数的最近的父函数)。
  • 使用 nonlocal 时,变量名必须已经在外层函数作用域中定义,否则会抛出一个 SyntaxError。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/854612
推荐阅读
相关标签
  

闽ICP备14008679号