在Python中,nonlocal
关键字用于在嵌套函数中引用外部(但不是全局)作用域的变量。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()
输出:
Inner function: 30
Outer function: 20
在这个例子中,inner_function
中的 a
是局部作用域中的一个新变量,它没有影响 outer_function
中的 a
。
现在,我们使用 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()
输出:
Inner function: 30
Outer function: 30
在这个例子中,inner_function
中的 a
现在引用的是 outer_function
的 a
。因此,inner_function
中对 a
的修改也影响了 outer_function
中的 a
。
需要注意的是,nonlocal
不会影响全局作用域中的变量。全局变量需要使用 global
关键字来引用。
总结:
nonlocal
用于嵌套函数中,用于在嵌套函数里引用最近的外层函数作用域中的变量。nonlocal
不会影响到全局作用域中的变量,只影响最近的外层作用域(也就是包含nonlocal
的函数的最近的父函数)。- 使用
nonlocal
时,变量名必须已经在外层函数作用域中定义,否则会抛出一个SyntaxError
。