• python-------装饰器


    import time
    from functools import wraps
    
    #不想改变原函数的调用方式,但是还想在原来的函数前后添加功能,选择装饰器
    #timer就是一个装饰器,
    #为了不完全影响原函数引入,warps,
    
    def timer(f):
        @wraps(f)
        def inner(*args,**kwargs):
            starttime = time.time()
            ret = f(*args,**kwargs)
            endtime = time.time()
            print(endtime- starttime)
            return ret
        return inner
    @timer              #语法糖 @装饰器函数名 语法等于   func = timer(func)
    def func(a):         #被装饰的函数
        '''这是一个函数'''
        time.sleep(1)
        print("43243",a)
        return '试试啊看你'
    
    # func = timer(func)
    func('a')
    ass = func('a')
    print(ass)
    print(func.__name__)
    print(func.__doc__)
    
    #原则: 开放闭合原则
    # 开放:对扩展是开放的
    # 封闭:对修改是关闭的
    
    #装饰器模板-------------
    def wrapper(f):
        def inner(*args,**kwargs):
            '''在被装饰函数之前要做的事'''
            ret = f(*args,**kwargs)
            '''在被装饰函数之后要做的事'''
            return ret
        return inner
    
    #多层装饰器修饰一个函数
    
    def wrapper1(func):
        def inner1():
            print('wrapper1,before func')
            ret = func()
            print('wrapper1,after func')
            return ret
        return inner1
    
    def wrapper2(func):
        def inner2():
            print('wrapper2,before func')
            ret = func()
            print('wrapper2,after func')
            return ret
        return inner2
    
    def wrapper3(func):
        def inner3():
            print('wrapper3,before func')
            ret = func()
            print('wrapper3,after func')
            return ret
        return inner3
    @wrapper3
    @wrapper2
    @wrapper1
    def f():
         print('hahah ')
         return '哈哈哈'
    print(f())

    思维导图------执行步骤

  • 相关阅读:
    2020.11.9
    2020.11.6
    2020.11.5
    2020.11.2
    建站纪念
    退役记——CCC2020&CCO2020
    BZOJ2809&&LG1552 APIO2012派遣(线段树合并)
    BZOJ4668 冷战(LCT维护最小生成树)
    BZOJ3926&&lg3346 ZJOI诸神眷顾的幻想乡(广义后缀自动机)
    BZOJ4566&&lg3181 HAOI找相同字符(广义后缀自动机)
  • 原文地址:https://www.cnblogs.com/xiangrikuidebuluo/p/9482195.html
Copyright © 2020-2023  润新知