# ### nonlocal 修改局部变量
'''
nonlocal 专门用于修改局部变量
(1)它自动寻找上一层空间的局部变量用来修改
(2)如果上一级也没有,在不停的向上寻找
(3)如果再也找不到了,直接报错
'''
# (1)nonlocal 符合LEGB原则
def outer():
a = 15
def inner():
nonlocal a
a = 17
print(a)
inner()
print(a)
outer()
# (2) nonlocal 修改的是局部变量,不是全局变量.
a = 16
def outer():
a = 10
def inner():
# a = 11
def smaller():
nonlocal a
a += 3
print(a)
smaller()
inner()
outer()
# (3) 不使用nonlocal 是否可以修改局部变量?
def outer():
# a = 3
lst = [1,2,3,4,5]
def smaller():
lst[2] += 5
smaller()
print(lst)
outer()
# 注意点:
'''
# a = 20
def outer():
a = 81
def inner():
global a
a = 16
def smaller():
# nonlocal a
# print(a) # 获取a
# global a
# a+=3
# 上一级找到的是一个全局变量,nonlocal无法修改
nonlocal a
print(a)
smaller()
inner()
outer()
'''