@decorator這個語法相當於 執行 func = decorator(func),為func函數裝飾並返回
<1> 類裝飾器

復制代碼
## 裝飾器
#類裝飾器
class Decorator:
    def __init__(self,func):
        ## 賦值函數
        self.func = func

    def __call__(self, *args, **kwargs):
        ## 一call頂萬物
        print('假設這里開始執行其他的代碼')
        self.other_func()
        self.func(*args, **kwargs)
        self.other_func2()
        print('假設這里在執行完這個函數后,執行了其他的代碼')
        return
    def other_func(self):
        print('這是一個打醬油的函數')

    @staticmethod
    def other_func2():
        print('這是一個吃瓜的函數')

## 測試一下
@Decorator
def test_a(a,b):
    print(f'print a :{a}')
    print(f'print b :{b}')
    c = a+b
    print(c)
    return c

test_a(1,2)
復制代碼

執行結果:

 

<2>函數裝飾器

函數裝飾器還是比較多的,相對來說

復制代碼
def zsq_func(func):
    print('這是一個函數裝飾器')
    def wrapper(*args,**kwargs):
        try:
            print('開始前,執行的代碼')
            func(*args,**kwargs)
            print('結束了,執行的代碼')
            return
        except:
            print('出錯了的處理')

    print('執行裝飾器函數前可以執行其他代碼')
    return wrapper

## 測試一下
@zsq_func
def func(a,b):
    print(f'print a :{a}')
    print(f'print b :{b}')
    c = a+b
    print(c)
    return c
func(1,2)