首頁常見問題正文

Python函數(shù)裝飾器有什么作用?

更新時間:2023-05-24 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  Python函數(shù)裝飾器是一種高級語法,用于修改或擴展函數(shù)的功能。它們允許在不修改原始函數(shù)代碼的情況下,通過將其包裝在另一個函數(shù)中來添加額外的行為。

  1.修改函數(shù)的行為:

  裝飾器可以在函數(shù)執(zhí)行之前或之后添加額外的代碼邏輯,從而修改函數(shù)的行為。例如,可以使用裝飾器記錄函數(shù)的執(zhí)行時間、驗證函數(shù)參數(shù)的有效性等。

  2.擴展函數(shù)的功能:

  通過裝飾器,可以在函數(shù)的基礎(chǔ)上添加額外的功能,而不需要修改原始函數(shù)的代碼。這樣可以實現(xiàn)代碼的復(fù)用和模塊化。例如,可以使用裝飾器添加緩存功能、實現(xiàn)權(quá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裝飾器應(yīng)用到了calculate_sum函數(shù)上。

  當我們調(diào)用calculate_sum(3, 5)時,裝飾器會自動執(zhí)行,計算函數(shù)的執(zhí)行時間并打印出來。最后,函數(shù)的返回值被賦給了result變量,并進行打印。

  輸出可能類似于:

函數(shù) calculate_sum 執(zhí)行時間為: 1.001234 秒
8

  這個示例展示了如何使用裝飾器來修改函數(shù)的行為,以記錄函數(shù)的執(zhí)行時間,而不需要修改原始函數(shù)的代碼。

分享到:
在線咨詢 我要報名
和我們在線交談!