1. 程式人生 > >python3學習之裝飾器

python3學習之裝飾器

python

#定義裝飾器,outer參數是函數,返回也是函數
#作用:在函數執行前和執行後分別附加額外功能
def  outer(func):
    def  inner(*args, **kwargs):
        print("log")
        func(*args, **kwargs)
        print("Don‘t back")
        # return "r"
    return inner
@outer
def  f1(a):
    print(a,"F1")
@outer
def  f2(a,b):
    print("F2",a,b)
f1(123)
f2(123,456)


#帶參數的裝飾器,在outer外邊又包裝了一層
def oo(arg):
    print("hihihihi")    #此處的代碼,在裝飾器被調用時就被執行,不需要等被裝飾的函數被調用
    def  outer(func):
        def  inner(*args, **kwargs):
            print(arg)
            print("log")
            func(*args, **kwargs)
            print("Don‘t back")
            print(arg)
            # return "r"
        return inner
    return outer
def  tt(func):
    def  inner(*args, **kwargs):
        # print(arg)
        print("aaaaa")
        func(*args, **kwargs)
        print("ttttt")
        # print(arg)
        # return "r"
    return inner
    
@tt
@oo(123333)   #可以多層裝飾,規則是:從上到下執行裝飾器
def  f1(a):
    print(a,"F1")

@oo(11111)
def  f2(a,b):
    print("F2",a,b)

#f1(123)
#f2(123,456)

結果:

hihihihi
hihihihi

python3學習之裝飾器