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

    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结合

    多个装饰器装饰一个函数

    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
     
  • 相关阅读:
    UNIX网络编程 第9章
    UNIX网络编程 第8章 基本UDP套接字编程
    UNIX网络编程 第7章 套接字选项
    UNIX网络编程 第6章 I/O复用:select和poll函数
    UNIX网络编程 第5章 TCP客户/服务器程序示例
    天神下凡
    藏宝图
    黑红树
    杀人游戏[中山市选2011]
    Monotonicity 2[POI2010]
  • 原文地址:https://www.cnblogs.com/bailo/p/9154386.html
Copyright © 2011-2022 走看看