zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    echarts 地图 动态 展示 结合css+js
    优化之误!
    SQL Server 运行计划操作符具体解释(3)——计算标量(Compute Scalar)
    NHibernate概括
    C++的IO操作
    (数据结构整理)NJUPT1054
    nginx模块开发
    Html学习(三) 分类学习
    android 屏幕适配
    【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
  • 原文地址:https://www.cnblogs.com/lishuangjian/p/11843391.html
Copyright © 2011-2022 走看看