nonlocal: 非局部的
nonlocal 可以使你在嵌套函数内部修改外层(非全局)作用域的变量
在函数的内部,我们在构建一个子函数去影响父函数变量的值,这样的行为,就是闭包。
nonlocal是Python3新增的作用域关键词。
在Python2中,闭包函数可以读取到父函数的变量,但无法修改该变量的值。为此,我们经常要把变量声明为global全局变量,但这就打破了闭包的性质。
为了解决这个问题,Python3引入了nonlocal。通过在闭包函数中声明nonlocal变量,就可以在闭包函数内访问和修改父函数内的同名变量。
def outer_function():
a = 20
def inner_function():
a = 30
print("Inner function: ", a)
inner_function()
print("Outer function: ", a)
outer_function()
输出:
Inner function: 30
Outer function: 20
def outer_function():
a = 20
def inner_function():
nonlocal a
a = 30
print("Inner function: ", a)
inner_function()
print("Outer function: ", a)
outer_function()
输出
Inner function: 30
Outer function: 30
需要注意的是,nonlocal 不会影响全局作用域中的变量。全局变量需要使用 global 关键字来引用。
总结: