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()
原文地址:https://www.cnblogs.com/lishuangjian/p/11843391.html