今天是鐵人賽的第二十九天,今天我深入了解裝飾器的應用,裝飾器可以在不修改原始函式代碼的情況下,擴展其功能,使程式碼更加整潔和可重用。
-1計算函式執行時間的裝飾器:了解一個函式執行的效率。
舉例:
import time
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"函式 '{func.name}' 執行時間: {end_time - start_time:.4f} 秒")
return result
return wrapper
@time_it
def slow_function():
# Indent the lines within the function body
time.sleep(2)
print("這是個慢函式")
slow_function()
-2計算函式被調用的次數的裝飾器:追蹤某個函式被執行的頻率。
舉例:
def count_calls(func):
def wrapper(*args, **kwargs):
wrapper.call_count += 1
print(f"函式 '{func.name}' 被調用 {wrapper.call_count} 次")
return func(*args, **kwargs)
wrapper.call_count = 0 # This line was incorrectly indented
return wrapper
@count_calls
def my_function():
print("這是我的函式")
my_function()
my_function()
-3限制函式執行次數的裝飾器:限制函式被調用的次數。
舉例:
def limit_calls(limit):
def decorator(func):
def wrapper(*args, **kwargs):
if wrapper.call_count < limit:
wrapper.call_count += 1
return func(*args, **kwargs)
else:
print(f"函式 '{func.name}' 已達到調用限制")
wrapper.call_count = 0
return wrapper
return decorator
@limit_calls(3)
def limited_function():
print("這是限制調用次數的函式")
limited_function()
limited_function()
limited_function()
limited_function()