Python自帶裝飾器是一個非常有用的工具。裝飾器可以用來修改或擴展現有函數的功能。簡而言之,它們是一些用來包裝函數的函數。
裝飾器使用的語法非常簡潔。可以通過在函數定義前使用@符號來調用它。例如下面是一個簡單的裝飾器示例:
def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()
在上面的示例中,定義了一個名為my_decorator()的裝飾器。該裝飾器內部包含了一個名為wrapper()的函數,wrapper()函數在say_hello()函數調用之前和之后都執行了一些操作。
當在say_hello()函數定義前添加了@my_decorator語法糖時,程序會自動調用my_decorator()裝飾器,并將say_hello()函數作為參數傳遞給它。
運行上面的代碼將會輸出以下結果:
Something is happening before the function is called. Hello! Something is happening after the function is called.
可以看到,在調用say_hello()函數之前和之后,my_decorator()裝飾器內部的wrapper()函數分別執行了一些操作。
裝飾器非常靈活,可以用來擴展和定制現有函數的功能。它們可以用于跟蹤函數調用、緩存函數結果、驗證函數輸入等等。
注意,在使用裝飾器時,需要保持函數簽名不變,即傳入和返回的參數類型與數量應該與原函數保持一致。