nonlocal 修改局部变量

# ### 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()
'''

  

原文地址:https://www.cnblogs.com/huangjiangyong/p/10835763.html