溫馨提示×

Python裝飾器如何簡化代碼

小樊
81
2024-11-02 05:18:16
欄目: 編程語言

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ù)添加相同的日志功能,而無需修改它們的代碼。

0