快速学会~~python闭包和装饰器

有时候我们可能会有些需要,要求在不改变原函数的情况下给函数增加功能,这个时候装饰器就派上了用场。

要理解装饰器需要先理解什么是闭包

闭包

定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。

举一个栗子:

def f_outer(str1):
	def f_inner(str2):
		print('同桌拿了我的%s,我%s了' %(str1, str2))
	return f_inner

#创建闭包
f = f_outer('秘制小汉堡')
f('笑')

输出:
在这里插入图片描述
在此我们可以看到闭包的特点

  1. 函数嵌套
  2. 内部函数使用了外部函数的变量(还包括外部函数的参数)
  3. 外部函数返回了内部函数

在此我们还可以看出闭包的作用
保存函数的参数和局部变量(这里没有写,大家可以自己试一下)

装饰器

说到了装饰器,我们需要知道装饰器的本质就是一个闭包

举第二个栗子:

def decorator(func):
	print('装饰器启动!')
	def inner():
		func()
		print('爱你傲')
	return inner

def wisher():
	print('三天之内心想事成')

wisher = decorator(wisher)
#此时wisher已经等于inner了
wisher()

输出:
在这里插入图片描述
实际使用的时候我们可以使用语法糖,方便调用

def decorator(func):
	print('装饰器启动!')
	def inner():
		func()
		print('爱你傲')
	return inner

@decorator
def wisher():
	print('三天之内心想事成')

wisher()

接下来我们梳理一下装饰器的执行过程,以便更好的理解和记忆

在执行wisher()时,因为之前语法糖的缘故
实际执行语句

wisher = decorator(wisher)
wisher()
  • 这里首先调用了装饰器,并把wisher函数传入,所以先执行了

  • print('装饰器启动!')

  • 接下里返回了inner函数,并赋值给wisher,也就是

  • wisher = inner

  • 接下来执行wisher(),也就是执行inner()

  • func(),这里由于之前传参,跳转到

  • def wisher(): print('三天之内心想事成')
    执行print('三天之内心想事成')

  • 最后执行print('爱你傲')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值