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()
    
  • 相关阅读:
    python之turtle画蚊香
    day08:多表查询
    day07:内置函数
    day06:基础查询
    day05:Navicat 图形化客户端的基本使用
    day04:MySQL数据库表的基本命令
    day03:MySQL数据库的使用
    day02:MySQL数据库的安装
    day01:数据库和SQL概述
    51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
  • 原文地址:https://www.cnblogs.com/lishuangjian/p/11843391.html
Copyright © 2011-2022 走看看