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

    #装饰器的作用,是不想修改函数的调用方式,但是还想在原来的函数前后添加功能
    import time
    
    def func():                  # 用户程序
        time.sleep(1.0)          # 停留1.0秒数
        print('老板好大家好')
    
    #装饰器函数
    def timmer(f):               # 一个计算一个函数执行时间的函数  (装饰器函数)
        def inner():
            start = time.time()  # 开始时间
            f()                  # 调用用户的函数并执行       (被装饰的函数)
            end = time.time()    # 结束时间
            print(end - start)   # 打印执行的时间
        return inner
    
    func = timmer(func)          # 执行计时程序调用用户程序统计运行时间
    func()
    #加上语法糖@timmer后,同样的效果如下
    #装饰器函数
    def timmer(f):               # 一个计算一个函数执行时间的函数  (装饰器函数)
        def inner():
            start = time.time()  # 开始时间
            f()                  # 调用用户的函数并执行       (被装饰的函数)
            end = time.time()    # 结束时间
            print(end - start)   # 打印执行的时间
        return inner
    
    @timmer                      #语法糖 @装饰器函数名
    def func():                  # 被装饰的函数
        time.sleep(1.0)          # 停留1.0秒数
        print('老板好大家好')
    
    func()
    #装饰器函数  具有返回值
    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(1.0)          # 停留1.0秒数
        print('老板好大家好')
        return '新年好'
    
    ret = func()
    print(ret)
    #装饰器 带参数的函数  具有返回值(为完整的装饰器函数)
    def timmer(f):               # 一个计算一个函数执行时间的函数  (装饰器函数)
        def inner(*args,**kwargs):
            start = time.time()  # 开始时间
            ret = f(*args,**kwargs)       # 调用用户的函数并执行       (被装饰的函数)
            end = time.time()    # 结束时间
            print(end - start)   # 打印执行的时间
            return ret
        return inner
    
    @timmer                      #语法糖 @装饰器函数名
    def func(a,b):                 # 被装饰的函数
        time.sleep(0.1)          # 停留0.1秒数
        print('老板好大家好',a,b)
        return '新年好'
    
    ret = func(1,2)
    print(ret)
    ret = func(3,b = 4)
    print(ret)

    #完整的装饰器函数使用方法(装饰器的固定模式)

    @wrapper  等同于 func = wrapper(func)

    def wrapper(f):                       # 装饰器函数
        def inner(*args,**kwargs):
            '''在被装饰函数前要做的事'''
            ret = f(*args,**kwargs)       # 调用用户的函数并执行  (被装饰的函数)
            '''在调用被装饰函数之后要做的事'''
            return ret
        return inner
    
    @wrapper                         #语法糖 @装饰器函数名
    def func(*args):                 # 被装饰的函数
        print('老板好大家好',args)
        return '新年好'
    
    ret = func([1,2,3],'df',(2,3,4))
    print(ret)

     


    #原则:开放封闭原则
    #开放:对扩展是开放的
    #封闭:对修改是封闭的

  • 相关阅读:
    Alpha冲刺Day10
    Alpha冲刺Day9
    Alpha冲刺Day8
    Alpha冲刺Day7
    Alpha冲刺Day6
    SDN
    【Alpha
    【Alpha】团队课程展示
    【Alpha】团队项目测试报告与用户反馈
    【Alpha】总结
  • 原文地址:https://www.cnblogs.com/bydzxzy/p/9650315.html
Copyright © 2011-2022 走看看