• Python9-装饰器进阶-day12


    wapers方法

    def wahaha():
        '''
        sljfldsjflds
        :return:
        '''
        print('娃哈哈')
    print(wahaha.__name__)  #查看字符串格式的函数名
    from functools import wraps
    def wrapper(func):  #func = login
        @wraps(func)
        def innner(*args,**kwargs):
            print('在被装饰的函数执行前做的事')
            ret = func(*args,**kwargs)
            print('在被装饰的函数执行后做的事')
            return ret
        return innner
    @wrapper      #login = wrapper(login)
    def login(day):
        '''这是一个放假通知'''
        print('全体放假%s'%day)
        return '好开心'
    print(login.__name__)
    print(login.__doc__)
    ret = login(3)   #inner
    print(ret)

    login
    这是一个放假通知
    在被装饰的函数执行前做的事
    全体放假3
    在被装饰的函数执行后做的事
    好开心

     装饰器进阶_带参数的装饰器

    import time
    FLAG = True
    def timmer_out(FLAG):
        def timmer(func):
            def inner(*args,**kwargs):
                if FLAG:
                    start = time.time()
                    ret = func(*args,**kwargs)
                    end = time.time()
                    print(end - start)
                    return ret
                else:
                    ret = func(*args,**kwargs)
                    return ret
            return inner
        return timmer
    @timmer_out(FLAG)
    def wahaha():
        time.sleep(0.1)
        print('hahahahahaha')
    #@timer = timer_out(FLAG)
    @timmer_out(FLAG)
    def erguotou():
        time.sleep(0.2)
        print('erguotoutotutou')
    
    wahaha()
    erguotou()

    hahahahahaha
    0.1000058650970459
    erguotoutotutou
    0.2000112533569336

     
    import time
    FLAG = False
    def timmer_out(FLAG):
        def timmer(func):
            def inner(*args,**kwargs):
                if FLAG:
                    start = time.time()
                    ret = func(*args,**kwargs)
                    end = time.time()
                    print(end - start)
                    return ret
                else:
                    ret = func(*args,**kwargs)
                    return ret
            return inner
        return timmer
    @timmer_out(FLAG)
    def wahaha():
        time.sleep(0.1)
        print('hahahahahaha')
    #@timer = timer_out(FLAG)
    @timmer_out(FLAG)
    def erguotou():
        time.sleep(0.2)
        print('erguotoutotutou')
    
    wahaha()
    erguotou()
    
    
    hahahahahaha
    erguotoutotutou

    #多个装饰器装饰一个函数

    def wrapper1(func):
        def innner1(*args,**kwargs):
            print('wrapper,before func')
            func()
            print('wrapper,after func')
        return innner1
    def wrapper2(func):
        def innner2(*args,**kwargs):
            print('wrapper,before func')
            func()
            print('wrapper,after func')
        return innner2
    @wrapper2
    @wrapper1
    def f():
        print('##########333')
    f()
    
    
    wrapper,before func
    wrapper,before func
    ##########333
    wrapper,after func
    wrapper,after func
    ####################################
    from functools import wraps
    def wrapper1(func): #func --->f
    def innner1(*args,**kwargs):
    print('wrapper1,before func')
    func() #f
    print('wrapper1,after func')
    return innner1
    def wrapper2(func): #func --->inner1
    def innner2(*args,**kwargs):
    print('wrapper2,before func')
    func() #inner1
    print('wrapper2,after func')
    return innner2
    @wrapper2 #f=wrapper2(f) === wrapper(inner1) ===inner2
    @wrapper1 #f=wrapper1(f) ==inner1 函数最近的装饰器先执行
    def f():
    print('##########333')
    f() #-----》inner2()
     

     

     三层嵌套

    from functools import wraps
    def wrapper1(func):  #func --->f
        def innner1(*args,**kwargs):
            print('wrapper1,before func')
            func()   #f
            print('wrapper1,after func')
        return innner1
    def wrapper2(func):   #func --->inner1
        def innner2(*args,**kwargs):
            print('wrapper2,before func')
            func()   #inner1
            print('wrapper2,after func')
        return innner2
    def wrapper3(func):   #func --->inner1
        def innner3(*args,**kwargs):
            print('wrapper3,before func')
            func()   #inner1
            print('wrapper3,after func')
        return innner3
    @wrapper3
    @wrapper2    #f=wrapper2(f)  === wrapper(inner1)  ===inner2
    @wrapper1   #f=wrapper1(f)  ==inner1   函数最近的装饰器先执行
    def f():
        print('##########333')
    f()    #-----》inner2()
    
    
    wrapper3,before func
    wrapper2,before func
    wrapper1,before func
    ##########333
    wrapper1,after func
    wrapper2,after func
    wrapper3,after func

     带返回值的多装饰器装饰函数

    def wrapper1(func):  #func --->f
        def innner1(*args,**kwargs):
            print('wrapper1,before func')
            ret = func()   #f
            print('wrapper1,after func')
            return ret
        return innner1
    def wrapper2(func):   #func --->inner1
        def innner2(*args,**kwargs):
            print('wrapper2,before func')
            ret = func()   #inner1
            print('wrapper2,after func')
            return ret
        return innner2
    def wrapper3(func):   #func --->inner1
        def innner3(*args,**kwargs):
            print('wrapper3,before func')
            ret = func()   #inner1
            print('wrapper3,after func')
            return ret
        return innner3
    @wrapper3
    @wrapper2    #f=wrapper2(f)  === wrapper(inner1)  ===inner2
    @wrapper1   #f=wrapper1(f)  ==inner1   函数最近的装饰器先执行
    def f():
        print('##########333')
        return 'hahahah'
    print(f())   #-----》inner2()

    wrapper3,before func
    wrapper2,before func
    wrapper1,before func
    ##########333
    wrapper1,after func
    wrapper2,after func
    wrapper3,after func
    hahahah

     
  • 相关阅读:
    ranger0.5.4-开源安装配置
    Spark Streaming 读取Kafka数据写入ES
    kettle与sqoop的比较
    spark常用算子
    eclipse快捷键
    hive相关操作
    我眼中如何成为一名合格PHP高级开发工程师
    laravel 路由404
    TP5.0 未定义变量
    公众号基本配置(token验证失败)|公众平台测试账号接口配置信息(token验证失败)
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10322880.html
Copyright © 2020-2023  润新知