nonlocal关键字用于声明一个变量是外部嵌套函数内的变量,而并非局部变量或全局变量。如果内部函数想要修改其外部函数的变量,就需要使用nonlocal关键字来声明这个变量。
def outer():
x = 0
def inner():
x += 1 # 这里尝试修改外部变量x,但由于没有nonlocal声明,实际创建了一个新的局部变量x
print("Inner:", x)
inner()
print("Outer:", x) # 输出 Outer: 0,因为内部函数并没有修改外部作用域的x
outer()
def outer():
x = 0
def inner():
nonlocal x # 使用nonlocal声明x是外部作用域的变量
x += 1 # 现在可以正确地修改外部变量x
print("Inner:", x)
inner()
print("Outer:", x) # 输出 Outer: 1,因为内部函数成功修改了外部作用域的x
outer()
在这两个例子中,第二个示例通过使用nonlocal
关键字,使得内部函数inner
能够修改外部函数outer
的作用域中的变量x
。而在第一个示例中,由于没有使用nonlocal
,内部函数实际上创建了一个新的局部变量x
,因此对外部变量x
没有任何影响。