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

  • 相关阅读:
    终端字符颜色、样式控制
    popen——php多进程利器
    游戏技能效果与buff设定
    Linux 记录服务器负载、内存、cpu状态的PHP脚本
    简单的,省份和城市选择,非ajax版
    一道js题目
    左右结构,右边上固定、下iframe,iframe自动改变大小
    mysql 忘记root密码
    socket 学习(转载)
    子页面关闭后,更新父页面
  • 原文地址:https://www.cnblogs.com/zhouA/p/14506214.html
Copyright © 2011-2022 走看看