装饰器

致命三连他来了

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

装饰器:装饰的工具

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

  开放:

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

  封闭:

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

装饰器的作用:

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

怎么用装饰器?

比如统计时间,登录认证

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

上边说的都是无参装饰器

装饰器还分为有参装饰器

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

原文地址:https://www.cnblogs.com/aheng/p/11842764.html