zoukankan      html  css  js  c++  java
  • Python:有参装饰器与多个装饰器装饰一个函数

    有参装饰器

    def timmerout(flag1):  #flag1 =flag
        def timmer(f):
            def inner(*args,**kwargs):
                if flag1:
                    start_time = time.time()
                    ret = f(*args,**kwargs)
                    end_time = time.time()
                    print('此函数的执行效率%s' % (end_time - start_time))
                    return ret
                else:
                    ret = f(*args, **kwargs)
                    return ret
            return inner
        return timmer
    
    
    flag = False
    @timmerout(flag)    #将@与timmerout(flag)分离,拿到后者的执行结果后在与@组合。
    def func1():
        time.sleep(0.3)
        print('非常复杂......')
        return 666
    

    1,将@ 与函数分开@ timmerout(flag) 返回了timmer
    2,将@timmer结合

    PS:遇到问题没人解答?需要Python学习资料?可以加点击下方链接自行获取
    note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76

    多个装饰器装饰一个函数

    def wrapper1(func):  # func = f函数名
        def inner1():
            print('wrapper1 ,before func')  # 2
            func()  # f函数名()
            print('wrapper1 ,after func')  # 4
        return inner1
    
    def wrapper2(func):  # func = inner1
        def inner2():
            print('wrapper2 ,before func')  # 1
            func()  # inner1()
            print('wrapper2 ,after func')  # 5
        return inner2
    
    @wrapper2  # f = warpper2(f)  里面的f是inner1 外面的f是inner2
    @wrapper1  # f = warpper1(f)  里面的f函数名 外面的f 是inner1
    def f():
        print('in f')  # 3
    f()  # inner2()
    
    
    # wrapper2 ,before func
    # wrapper1 ,before func
    # in f
    # wrapper1 ,after func
    # wrapper2 ,after func
    
  • 相关阅读:
    质因数分解
    P1939 【模板】矩阵加速(数列)
    UVALive
    Python操作MySQL:pymysql模块
    Mysql数据库基础
    Redis管道和发布订阅
    Redis常用操作
    Redis操作集合,有序集合
    Redis操作list
    Redis操作hash
  • 原文地址:https://www.cnblogs.com/python960410445/p/12051323.html
Copyright © 2011-2022 走看看