Python 中的裝飾器是一種非常強大的工具,可以讓我們方便地修改函數或者類的行為。裝飾器本質上是一個特殊的函數,接受一個函數或者類作為參數,并且返回一個新的函數或者類。
def my_decorator(func): def wrapper(*args, **kwargs): print('Before function is called.') result = func(*args, **kwargs) print('After function is called.') return result return wrapper @my_decorator def my_function(): print('Function is called.') my_function()
上面的例子演示了一個簡單的裝飾器,當 my_function 被調用時,會先執行 my_decorator 函數,并且在執行 my_function 函數的前后打印一些信息。
可以看到,裝飾器的使用非常方便,通過在函數上添加 @my_decorator 裝飾器就可以完成函數行為的修改。如果要取消裝飾器的效果,只需要在函數上添加 @my_decorator 裝飾器即可。
def my_function(): print('Function is called.') @my_decorator def my_function_decorated(): print('Function is called.') my_function() my_function_decorated()
裝飾器還可以接受參數,這樣就可以讓裝飾器更加靈活。下面是一個接受參數的裝飾器示例:
def repeat(num): def my_decorator(func): def wrapper(*args, **kwargs): for i in range(num): func(*args, **kwargs) return wrapper return my_decorator @repeat(num=3) def my_function(): print('Function is called.') my_function()
上面的例子定義了一個 repeat 裝飾器,接受一個 num 參數,表示要重復執行多少次被裝飾的函數。當使用 @repeat(num=3) 裝飾 my_function 函數時,my_function 會被重復執行 3 次。