nonlocal,如果在闭包内给该变量赋值,那么修改的其实是闭包外那个作用域中的变量。global用来表示对该变量的赋值操作,将会直接修改模块作用域里的那个变量。(nonlocal与global互为补充)
——《Effective Python》
一、global
- global关键字用来在函数或其他局部作用域中使用全局变量。
- 如果局部要对全局变量修改,必须在局部声明该全局变量。
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)
输出结果:
1
123
123
二、nonlocal
nonlocal声明的变量是外部嵌套函数内的变量,必须是定义在闭包里面的。
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
输出结果:
100
100