day11---装饰器
装饰器
1.1、什么是装饰器
装饰:装饰,修饰
器:工具
装饰的工具。
开放:对函数功能的添加是开放的。
封闭:对函数功能的修改是封闭的。
1.2、作用
在不修改被装饰对象的 源代码 和 调用方式 的前提下,添加新的功能。
1.3、定义必须遵循
不修改被装饰对象的源代码。
不修改被装饰对象的调用方式。
1.4、为什么使用闭包函数
可以解决代码的冗余,提高代码的可扩展性。
1.5、使用
应用:统计时间, 登录认证,插入日志,性能测试,事物处理,缓存,权限校验等。
例:需求:
统计下载电影的时间
假如有多个参数
def download_movie(*args, **kwargs): #可以接收多个值
print('开始下载电影')
time.sleep(2) #模拟电影下载时间等待2秒
print('电影下载结束')
# return '好小子.mp3'
def time_record(f): #装饰器
def inner(*args, **kwargs):
start_time = time.time() #获取开始时间
res = f(*args,**kwargs)
end_time = time.time() #获取执行完毕的当前时间
print(f'消耗的时间:{end_time-start_time}')#打印需要的时间
return res
return inner
download_movie = time_record(download_movie)
download_movie('https://www.baidu.com','url')
装饰器语法糖
@:装饰器的语法糖
注意: 在使用装饰器语法糖时,装饰器必须定义在被装饰对象之上。
def wrapper(func): #被装饰对象
def inner(*args, **kwargs): #被装饰对象函数
print('电影开始下载')
start_time = time.time()
res = func(*args, **kwargs)
end_time = time.time()
print(end_time-start_time)
print('电影下载结束')
return res
return inner
@wrapper
def func():
time.sleep(3)
func()