zoukankan      html  css  js  c++  java
  • 装饰器

    致命三连他来了

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

    装饰器:装饰的工具

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

      开放:

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

      封闭:

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

    装饰器的作用:

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

    怎么用装饰器?

    比如统计时间,登录认证

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

    上边说的都是无参装饰器

    装饰器还分为有参装饰器

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

  • 相关阅读:
    将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式
    hive基本结构与数据存储
    使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决
    Sqoop导入关系数据库到Hive
    SVN版本回退
    SVN--分支、合并
    关于SVN版本分支合并的知识
    在spring环境下集成ActiveMQ
    ActiveMQ
    Oracle中sequence的使用方法
  • 原文地址:https://www.cnblogs.com/aheng/p/11842764.html
Copyright © 2011-2022 走看看