更新時間:2023-05-24 來源:黑馬程序員 瀏覽量:
Python函數(shù)裝飾器是一種高級語法,用于修改或擴展函數(shù)的功能。它們允許在不修改原始函數(shù)代碼的情況下,通過將其包裝在另一個函數(shù)中來添加額外的行為。
裝飾器可以在函數(shù)執(zhí)行之前或之后添加額外的代碼邏輯,從而修改函數(shù)的行為。例如,可以使用裝飾器記錄函數(shù)的執(zhí)行時間、驗證函數(shù)參數(shù)的有效性等。
通過裝飾器,可以在函數(shù)的基礎上添加額外的功能,而不需要修改原始函數(shù)的代碼。這樣可以實現(xiàn)代碼的復用和模塊化。例如,可以使用裝飾器添加緩存功能、實現(xiàn)權限檢查等。
下面是一個示例,演示如何使用裝飾器來記錄函數(shù)的執(zhí)行時間:
import time def calculate_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() execution_time = end_time - start_time print(f"函數(shù) {func.__name__} 執(zhí)行時間為: {execution_time} 秒") return result return wrapper @calculate_time def calculate_sum(a, b): time.sleep(1) # 模擬耗時操作 return a + b result = calculate_sum(3, 5) print(result)
在上面的示例中,calculate_time是一個裝飾器函數(shù),它接受一個函數(shù)作為參數(shù),并返回一個新的函數(shù) wrapper。wrapper函數(shù)中記錄了函數(shù)的執(zhí)行時間,并在函數(shù)執(zhí)行完畢后打印執(zhí)行時間。通過在calculate_sum函數(shù)上方使用@calculate_time,我們將calculate_time裝飾器應用到了calculate_sum函數(shù)上。
當我們調用calculate_sum(3, 5)時,裝飾器會自動執(zhí)行,計算函數(shù)的執(zhí)行時間并打印出來。最后,函數(shù)的返回值被賦給了result變量,并進行打印。
輸出可能類似于:
函數(shù) calculate_sum 執(zhí)行時間為: 1.001234 秒 8
這個示例展示了如何使用裝飾器來修改函數(shù)的行為,以記錄函數(shù)的執(zhí)行時間,而不需要修改原始函數(shù)的代碼。