溫馨提示×

Python裝飾器如何處理參數(shù)

小樊
81
2024-11-02 05:22:15
欄目: 編程語言

在Python中,裝飾器是一種特殊類型的函數(shù),它可以用來修改其他函數(shù)的行為。裝飾器可以接受參數(shù),這使得它們更加靈活和可重用。要處理裝飾器的參數(shù),你需要使用functools.wraps來保留原函數(shù)的元數(shù)據(jù),并使用一個外部函數(shù)來接收和處理這些參數(shù)。

下面是一個簡單的例子,展示了如何創(chuàng)建一個帶參數(shù)的裝飾器:

import functools

def decorator_with_args(arg1, arg2):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print(f"裝飾器參數(shù):{arg1}, {arg2}")
            result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@decorator_with_args("Hello", "World")
def my_function(a, b):
    return a + b

result = my_function(1, 2)
print(f"函數(shù)結(jié)果:{result}")

在這個例子中,我們創(chuàng)建了一個名為decorator_with_args的外部函數(shù),它接受兩個參數(shù)arg1arg2。這個函數(shù)返回一個裝飾器,該裝飾器接受一個函數(shù)func作為參數(shù)。在裝飾器內(nèi)部,我們定義了一個名為wrapper的嵌套函數(shù),它接受任意數(shù)量的位置參數(shù)和關(guān)鍵字參數(shù)。在wrapper函數(shù)內(nèi)部,我們可以訪問外部函數(shù)的參數(shù)arg1arg2,并在調(diào)用原始函數(shù)之前或之后執(zhí)行任何自定義邏輯。

當(dāng)我們使用@decorator_with_args("Hello", "World")裝飾my_function時,裝飾器會打印出傳遞給它的參數(shù),然后調(diào)用原始函數(shù)并返回其結(jié)果。

0