Python裝飾器是一種在不修改原始函數(shù)代碼的情況下,為函數(shù)增加新功能的方法。它們通過在原始函數(shù)前添加一個包裝函數(shù)來實現(xiàn)這一目的。裝飾器可以簡化代碼,提高代碼的可讀性和可維護性。
以下是一個簡單的裝飾器示例:
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
是一個裝飾器函數(shù),它接受一個函數(shù) func
作為參數(shù)。wrapper
函數(shù)是實際的包裝函數(shù),它在調(diào)用原始函數(shù)之前和之后執(zhí)行一些額外的操作。通過使用 @my_decorator
語法,我們將 say_hello
函數(shù)與 my_decorator
裝飾器關(guān)聯(lián)起來。
當(dāng)調(diào)用 say_hello()
時,實際上是在調(diào)用 wrapper
函數(shù),因此會看到以下輸出:
Something is happening before the function is called.
Hello!
Something is happening after the function is called.
裝飾器可以簡化代碼,例如:
def log_time(func):
import time
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} took {end_time - start_time:.2f} seconds to execute.")
return result
return wrapper
@log_time
def my_function():
time.sleep(2)
print("Function executed.")
my_function()
在這個例子中,log_time
裝飾器用于記錄函數(shù)的執(zhí)行時間。通過使用裝飾器,我們可以輕松地為其他函數(shù)添加相同的日志功能,而無需修改它們的代碼。