2018年11月14日 星期三

python - 帶參數的裝飾器

#帶參數的裝飾器#500個函數import  time
FLAGE  =  Falsedef 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 =  timmer out(FLAGE)@timmer_out (FLAGE)  # wahaha =  timmer(wahaha)def wahaha():
    time.sleep(0.1)
    print("wawawahahahaha")

@timmer_out(FLAGE)
def erguotou():
    time.sleep(0.1)
    print("ererereyoyoyoyo")

wahaha()
erguotou()

#多個裝飾器裝飾一個函數def wrapper1(func):
    def inner1():
        print('wrapper1 ,before func')
        ret = func()
        print('wrapper1 ,after func')
        return  ret
    return  inner1
def wrapper2(func):
    def inner2():
        print('wrapper2 ,before func')
        ret = func()
        print('wrapper2 ,after func')
        return  ret
    return  inner2

def wrapper9(func):
    def inner3():
        print('wrapper3 ,before func')
        ret = func()
        print('wrapper3 ,after func')
        print('test 1')
        return  ret
    return  inner3
@wrapper9@wrapper2@wrapper1
def f():
    print('in f')
    return  '哈哈哈'
print(f())
執行結果:
wrapper3 ,before func
wrapper2 ,before func
wrapper1 ,before func
in f
wrapper1 ,after func
wrapper2 ,after func
wrapper3 ,after func
test 1
哈哈哈







沒有留言:

張貼留言