python有参装饰器详解_PYTHON-有参装饰器,无参装饰器,语法糖

装饰器

装饰器就是闭包函数的一种应用场景

一 为何要用装饰器

#开放封闭原则:对修改封闭,对扩展开放

二 什么是装饰器

装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。

强调装饰器的原则:

1 不修改被装饰对象的源代码

2 不修改被装饰对象的调用方式

装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能

三 装饰器的使用

1. 无参装饰器

def 装饰器名字(func):

def wrapper(*args,**kwargs):

#func是被装饰的对象,这里可以写执行前的功能

res=func(*args,**kwargs)

# 这里可以写执行后的功能

return res

return wrapper

@装饰器名字 #被装饰的函数名字 = 装饰器名字(被装饰的函数内存地址)

def 被装饰的函数名字():

pass

2. 有参装饰器

def 装饰器名字(参数1,参数2,...):

def outter(func):

def wrapper(*args,**kwargs):

res=func(*args,**kwargs)

return res

return wrapper

return outter

@装饰器名字(值1,值2,...) #@outter

def 被装饰的函数名字():

pass

3. 语法糖:在被装饰对象正上方单独一行写

无参:@装饰器的名字

有参:@装饰器的名字(arg1,arg2,...)

@timmer # index=timmer(index)

def index():

pass

@auth2(engine='file') # @名字 # index=名字(index)

def index():

pass

叠加多个装饰器

@deco1

@deco2

@deco3

def index():

pass

解释语法的顺序:自下而上,deco3=》deco2=》deco1

调用index()时才开始触发装饰器内部闭包函数的执行,闭包函数执行顺序是:自上而条,

deco1.wrapper1=>deco2.wrapper2=>deco3.wrapper3

wrapper.__name__=func.__name__ (函数名字赋值)

wrapper.__doc__=func.__doc__ (注释的内用赋值#)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值