函数嵌套中仅使用外层函数中定义的变量(例如print()),不需要nonlocal,对外层函数中的变量进行处理时需要nonlocal。
外层函数中定义的变量是可变数据类型时不需要nonlocal,因为对可变数据类型修改,不会改变原来的变量,python2中没有nonlocal关键字时使用的就是这种方法。
# 例如:
def f1():
a=50
def f2():
print(a) # 此处使用a但没有修改
f2()
f1()
def f1():
a=50
def f2():
nonlocal a
a=a+1 # 此处修改了a,需要加上nonlocal
print(a)
f2()
f1()
# 在python2中没有nonlocal关键字,使用列表来操作:
def f1():
a=[50]
def f2():
a[0]=a[0]+1
print(a[0])
f2()
f1()