Def
nonlocal: 在一个子函数中声明当前变量不是局部变量,也就是说,可以在当前子函数中使用其父函数定义的变量,并且可以作修改。且在子函数中修改之后在父函数中的变量也会变成修改之后的变量。
eg:
x = 1
def func():
nonlocal x
x = 2
return x
print(func())
print(x)
得到结果
2
2
global: 在一个子函数中定义的变量是全局变量,可以在当前子函数的外面使用这个定义的global变量。
def func():
global x
x = 2
func()
print(x)
得到结果
2
Summary
再总结一下,nonlocal是从当前函数外拿变量修改,global是把当前函数拿到函数外,从而函数外可以使用并且修改。
nonlocal: 函数内 <- 函数外
global: 函数内 -> 函数外