zoukankan      html  css  js  c++  java
  • 012.Python基础--装饰器深入

    多个装饰器的用法:

    装饰器的调用顺序:与@装饰名 出现的顺序相反,越后出现越先执行

    装饰器是可叠加使用的

    实现两个装饰器的实例:

    import time
    def deco01(x):
        def wrapper(*args, **kwargs):
            print("this is deco01")
            start_time = time.time()
            x(*args, **kwargs)
            end_time = time.time()
            execution_time = (end_time - start_time)*1000
            print("time is %d ms" % execution_time)
            print("deco01 end here")
        return wrapper
    
    def deco02(x):
        def wrapper(*args, **kwargs):
            print("this is deco02")
            x(*args, **kwargs)
    
            print("deco02 end here")
        return wrapper
    
    @deco01
    @deco02
    def f(a,b):
        print("be on")
        time.sleep(1)
        print("result is %d" %(a+b))
    
    if __name__ == '__main__':
        f(3,4)

    f(a,b)先被deco02装饰 再被deco01装饰

    得到结果如下:

    参数传递:

    两类:

      固定参数的装饰器

      无固定参数的装饰器

    固定参数:

    import time
    def deco(x):
        def wrapper(a,b):
            start_time = time.time()
            x(a,b)
            end_time = time.time()
            execution_time = (end_time - start_time)*1000
            print("time is %d ms" % execution_time)
        return wrapper
    @deco
    def f(a,b):
        print("be on")
        time.sleep(1)
        print("result is %d" %(a+b))
    
    if __name__ == '__main__':
        f(3,4)

    无固定参数:

    def deco(x):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            x(*args, **kwargs)
            end_time = time.time()
            execution_time = (end_time - start_time)*1000
            print("time is %d ms" %execution_time)
        return wrapper
    @deco
    def f(a,b):
        print("be on f1")
        time.sleep(1)
        print("result is %d" %(a+b))
    @deco
    def f2(a,b,c):
        print("be on f2")
        time.sleep(1)
        print("result is %d" %(a+b+c))
    
    if __name__ == '__main__':
        f2(3,4,5)
        f(3,4)

    f2()  和 f()  都被装饰

  • 相关阅读:
    DateTimePicker常用格式类型
    自定义TreeNode
    memoのPython环境配置
    关于隐式积分方程的一些问题
    Position Based Dynamics【译】
    memoのMac折腾记录
    20210425 助教一周小结(第十二周)
    20210328 助教一周小结(第八周)
    20210307 助教一周小结(第五周)
    20210404 助教一周小结(第九周)
  • 原文地址:https://www.cnblogs.com/zhouA/p/14506214.html
Copyright © 2011-2022 走看看