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
是一個裝飾器函數,它接受一個函數 func
作為參數。wrapper
函數是實際的包裝函數,它在調用原始函數之前和之后執行一些額外的操作。通過使用 @my_decorator
語法,我們將 say_hello
函數與 my_decorator
裝飾器關聯起來。
當調用 say_hello()
時,實際上是在調用 wrapper
函數,因此會看到以下輸出:
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
裝飾器用于記錄函數的執行時間。通過使用裝飾器,我們可以輕松地為其他函數添加相同的日志功能,而無需修改它們的代碼。