• 装饰器


    致命三连他来了

    什么是装饰器?装饰器的作用?怎么使用装饰器?

    装饰器:装饰的工具

    装饰器必须遵守“开放封闭”的原则

      开放:

        对函数功能的添加是开放的

      封闭:

        对函数功能的修改时封闭的

    装饰器的作用:

      在不修改被装饰对象源代码与调用方式的前提下,添加新的功能

    怎么用装饰器?

    比如统计时间,登录认证

    # 装饰器终极版
    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)

    上边说的都是无参装饰器

    装饰器还分为有参装饰器

    应用于在某些时候,我们需要给用户的权限进行分类

  • 相关阅读:
    Java课程设计---实现登录(2)
    Java课程设计---项目数据库设计(含实体类)
    Java课程设计---学生信息管理系统需求分析及总体设计
    Java课程设计---索引
    【软件测试】基础-概念篇
    【计算机网络】定义、作用、特点计算机网络
    【计算机网络】趣谈网络协议-测试习题
    【Java】Java注释
    【Java】一个简单的Java应用程序
    【Java】Java关键字、含义
  • 原文地址:https://www.cnblogs.com/aheng/p/11842764.html
Copyright © 2020-2023  润新知