致命三连他来了
什么是装饰器?装饰器的作用?怎么使用装饰器?
装饰器:装饰的工具
装饰器必须遵守“开放封闭”的原则
开放:
对函数功能的添加是开放的
封闭:
对函数功能的修改时封闭的
装饰器的作用:
在不修改被装饰对象源代码与调用方式的前提下,添加新的功能
怎么用装饰器?
比如统计时间,登录认证
# 装饰器终极版 def wrapper(func): def inner(*args,**kwargs): # 接受用户输入的值 star_time = time.time() # 记录当前时间 res = func(*args,**kwargs) # 接受被装饰函数的返回值 end_time = time.time() print(res) # 打印res的内容 print(f'消耗下载时间{end_time - star_time}') return res return inner @wrapper # 语法糖 def func1(url): print(f'{url}电影下载开始') time.sleep(1) # 等待一秒 print(f'{url}电影下载结束') return '魔童降世.mp4' func1('www.baidu.com') # 用户输入 # 打印结果: # www.baidu.com电影下载开始 # www.baidu.com电影下载结束 # 魔童降世.mp4 # 消耗下载时间1.0004057884216309
装饰器的语法糖
@装饰器(函数)
被装饰对象的源代码
注意:在使用装饰器语法糖时,装饰器必须在被装饰对象之前
装饰器的好处
解决代码冗余问题,提高代码的可扩展性
叠加装饰器
叠加装饰器就是在同一个被装饰对象中,添加多个装饰器,并执行
装饰顺序:从下到上
执行顺序:从上到下
PS:装饰器在调用被装饰对象时才会执行
无论inner中出现任何判断,最后都要返回“调用后的被装饰对像”func(*arge,**kwargs)