• Python中的装饰器


    装饰器的详解

    装饰器的作用

      在不修改原有函数的基础之上添加指定的功能属性;主要应用与开放封闭原则中。

    示例

    import time
    def timmer(f):          #装饰器函数
        def inner():
            start = time.time()
            ret = f()       #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    # @timmer               #语法糖 @装饰器函数名
    def func():             #被装饰的函数
        time.sleep(0.01)
        print('老板好同事好大家好')
        return '新年好'
    func = timmer(func)
    ret = func()
    print(ret)
    View Code

    装饰器的使用情景

    情景1:基本装饰器

    import time
    def wrapper(func):
        def funct():
            start = time.time()
            func()
            end = time.time()
        return funct
    
    def func():
        time.sleep(0.5)
        print('test')
    
    func = wrapper(func)
    func()

    情景2:强化装饰器-有返回的装饰器

    import time
    def wrapper(func):
        def Wrapper():
            start = time.time()
            ret = func()
            end = time.time()
            return ret
        return Wrapper
    
    @wrapper
    def func():
        time.sleep(0.5)
        print('hello world')
        return 'HELLO WORLD'
    Func = wrapper(func)
    print(Func())

    情景3:强化装饰器-有一个参数

    import time
    def timmer(f):    #装饰器函数
        def inner(*args):
            #(1,2) /(1)
            start = time.time()
            ret = f(*args)  #f(1,2)       #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    
    @timmer         #语法糖 @装饰器函数名
    def func(a):     #被装饰的函数
        time.sleep(0.01)
        print('老板好同事好大家好',a)
        return '新年好'
    ret = func(1)
    print(ret)

    情景4:强化装饰器-有无穷参数

    import time
    def timmer(f):    #装饰器函数
        def inner(*args,**kwargs):
            #(1,2) /(1)
            start = time.time()
            ret = f(*args,**kwargs)  #f(1,2)       #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    
    @timmer         #语法糖 @装饰器函数名
    def func(a,b):     #被装饰的函数
        time.sleep(0.01)
        print('老板好同事好大家好',a,b)
        return '新年好'
    ret = func(1,b = 2)
    print(ret)

    装饰器的固定模式

    def wrapper(func):   #qqxing
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)   #被装饰的函数
            return ret
        return inner
  • 相关阅读:
    Timer定时任务
    spring boot配置多数据源
    消费者模块调用提供者集群报错
    修改windHost文件
    spring常用注解+Aop
    添加ClustrMaps
    无题
    2020年3月21日 ICPC训练联盟周赛,Benelux Algorithm Programming Contest 2019
    2020年3月14日 ICPC训练联盟周赛,Preliminaries for Benelux Algorithm Programming Contest 2019
    2020.4.12 个人rating赛 解题+补题报告
  • 原文地址:https://www.cnblogs.com/guge-94/p/10449343.html
Copyright © 2020-2023  润新知