📜  python nonlocal - Python (1)

📅  最后修改于: 2023-12-03 15:04:06.602000             🧑  作者: Mango

Python nonlocal

在Python中,使用nonlocal关键字可以在一个嵌套的函数中修改一个父级函数中变量的值。这对于一些需要更复杂的闭包结构的场景非常有用。

语法

nonlocal关键字后跟一个变量名称。

def parent_func():
    x = 1

    def child_func():
        nonlocal x
        x = 2

    child_func()
    print(x)

parent_func()  # 输出2

使用nonlocal关键字时,必须确保该变量是在闭包内定义的且未被赋值为一个新的对象。否则,会抛出SyntaxError

def parent_func():
    x = 1

    def child_func():
        nonlocal x
        x = 2

    x = 3  # 子函数中的非局部变量被赋值为3,会抛出SyntaxError
    child_func()
    print(x)
注意事项
  • nonlocal仅作用于内层闭包的变量,如果需要修改更上层父函数的变量,则需要使用递归调用或第三方的工具库。
  • 如果在嵌套多层的函数中使用nonlocal关键字,需要确保它指向正确的变量。
  • nonlocal只能在Python3及以上版本中使用,在Python2中无法使用。
结论

nonlocal关键字可以方便地修改闭包中的变量值,并且在一些复杂的嵌套函数中非常有用。但是,需要注意一些使用时的注意事项。如果你正在编写需要修改闭包中的父函数变量值的函数,那么nonlocal关键字确实值得你关注。