python - 函数 - 闭包

闭包

书接上回。我们已经知道,在嵌套函数中,内部函数没有的参数会到外部函数的局部作用域里去找。利用这个特性,可以配合函数的闭包去实现一些好的作用。

闭包的概念:如果内部函数在外部函数返回后被调用,此时就形成了闭包。闭包使得内部函数即便在外部函数的执行上下文结束后,依然能访问外部函数的作用域。

场景类比

让我们带入一个场景,闭包的进行类比理解:

  • 一群大人(外层函数)带着一群小孩(内层函数)到大人们设立的包间(环境状态)里吃饭;
  • 大人们带了烤炉(外层函数添加变量,环境状态改变),小孩带不了(内层函数没有对应变量),可以用大人带的烤炉(内层函数能访问外层函数作用域变量)
  • 当大人们吃完后,先走了(每次执行后局部作用域栈帧销毁),但是烤炉还在房间里(环境状态保留),小孩可以继续使用烤炉(内层函数可以继续访问和使用当前环境状态)
  • 如果想要找小孩做食物(调用内层函数做运行),得先通过大人再找小孩(先调用外层函数得到内层函数的引用地址),然后再让小孩做(在得到的引用地址后加括号)

应用举例

这是一个计算base的exp次方的函数。可以看到,将exp设置为2时,可以作为计算base的平方的函数使用;而将exp设置为3时,则可以作为计算base的立方的函数使用,以此类推。

def power(exp):
	def exp_of(base):
		return base ** exp
	return exp_of

square = power(2)
cube 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值