首页 > 技术文章 > 闭包函数

huangjiangyong 2019-05-08 23:00 原文

# 闭包函数
'''
闭包:
	内函数使用了外函数的局部变量,
	并且外函数把内函数返回出来的过程是闭包
	这个内函数叫做闭包函数;
'''
# (1) 基本语法
def outer():
	a = 5
	b = 6
	# inner 是闭包函数
	def inner():
		print(a,b)
	return inner
res = outer()  # res = inner
print(res)
res()          # res() = inner()

# 获取闭包函数使用的变量  __closure__ , cell_contents (了解)
tup = res.__closure__
print("<==1==>")
print(tup)
# 获取元组里面第一个元素
obj = tup[0]
print(obj)
# 使用cell_contents来获取单元对象当中的值
res = obj.cell_contents
print(res)

obj2 = tup[1]
res2 = obj2.cell_contents
print(res2)
print("<==2==>")

# 闭包的特点:
"""
    内函数使用了外函数的局部变量,外函数的局部变量与内函数发生绑定,延长该变量的生命周期
    (实际内存给它存储了这个值,暂时不释放)
"""
# (2) 闭包函数特点
def majunqiang_family():
	dajie = "马蓉"
	erjie = "马冬梅"
	kuang = "金矿"
	# money 局部变量因为在闭包函数中使用,于是发生绑定,延长该变量的生命周期
	money = 1000
	
	def dajie_hobby():
		nonlocal money
		money -= 900
		print("大姐喜欢花钱,喜欢买兰博基尼,喜欢买比基尼,喜欢买channel,家里钱还剩下%d" % (money))

	def erjie_hobby():
		nonlocal money
		money += 500
		print("二姐马冬梅喜欢赚钱,喜欢上长春扎疫苗,因为假疫苗能赔偿,喜欢卖血,5块钱一瓶,家里钱赚了%d" % (money))

	def master():
		# 返回一个元组,元组里面的每一个元素是函数
		return (dajie_hobby,erjie_hobby)
		
	return master


func = majunqiang_family()
tup = func()
print(tup)
# 大姐函数
dajie = tup[0]
dajie()
# 二姐函数
erjie = tup[1]
erjie()

  

推荐阅读