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() #輸出: #Something is happening before the function is called. #Hello! #Something is happening after the function is called.
裝飾器還可以接受參數,這樣就可以靈活地根據不同的需求來使用不同的裝飾器。
#裝飾器接受參數 def my_decorator_with_args(num): def wrapper(func): def inner_wrapper(): print("Something is happening before the function is called.") for i in range(num): func() print("Something is happening after the function is called.") return inner_wrapper return wrapper @my_decorator_with_args(3) def say_hello(): print("Hello!") say_hello() #輸出: #Something is happening before the function is called. #Hello! #Hello! #Hello! #Something is happening after the function is called.
還有一種常用的裝飾器就是緩存裝飾器,可以將函數的運行結果緩存下來,下次調用時直接返回緩存內容,無需重新運算。
#緩存裝飾器 def memoize(func): cache = {} def wrapper(*args): if args in cache: return cache[args] else: result = func(*args) cache[args] = result return result return wrapper @memoize def fibonacci(n): if n< 2: return n return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(50)) #輸出:12586269025
在實際應用中,裝飾器可以結合多個其他功能一起使用,比如多線程、異常處理等等。需要注意的是,在使用裝飾器時要保證被裝飾的函數的簽名不變,否則會導致調用出錯。
總的來說,Python裝飾器是一個非常強大的工具,可以增強代碼的可讀性與可維護性。掌握裝飾器的相關技能,將會對程序員的工作有很大的幫助。