Python里的function如何實(shí)現(xiàn)裝飾器

小樊
82
2024-09-29 14:52:04

在Python中,裝飾器是一種特殊類(lèi)型的函數(shù),它可以用來(lái)修改其他函數(shù)的行為。裝飾器本質(zhì)上是一個(gè)接受函數(shù)作為參數(shù)并返回一個(gè)新函數(shù)的高階函數(shù)。下面是一個(gè)簡(jiǎ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()

在這個(gè)例子中,my_decorator 是一個(gè)裝飾器函數(shù),它接受一個(gè)函數(shù) func 作為參數(shù),并定義了一個(gè)內(nèi)部函數(shù) wrapper。wrapper 函數(shù)在調(diào)用 func 之前和之后分別執(zhí)行了一些額外的操作。最后,my_decorator 返回了 wrapper 函數(shù)。

要使用裝飾器,我們可以在要裝飾的函數(shù)定義之前加上一個(gè) @decorator_name 行。在這個(gè)例子中,我們?cè)?say_hello 函數(shù)定義之前加上了 @my_decorator,這意味著當(dāng)我們調(diào)用 say_hello 時(shí),實(shí)際上是在調(diào)用 my_decorator(say_hello)。

運(yùn)行上面的代碼,輸出將會(huì)是:

Something is happening before the function is called.
Hello!
Something is happening after the function is called.

這樣,我們就成功地使用裝飾器修改了 say_hello 函數(shù)的行為。

0