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()  都被装饰

  • 相关阅读:
    Chrome 已经原生支持截图功能,还可以给节点截图!
    【promise| async/await】代码的控制力
    移动端各种分辨率手机屏幕----适配方法集锦
    Web Storage事件无法触发
    【php学习】图片处理三步走
    NYOJ 36 LCS(最长公共子序列)
    NYOJ 252 01串 普通dp
    NYOJ 18 The Triangle 填表法,普通dp
    NYOJ-171 聪明的kk 填表法 普通dp
    NYOJ17 最长单调递增子序列 线性dp
  • 原文地址:https://www.cnblogs.com/zhouA/p/14506214.html
Copyright © 2011-2022 走看看