Python的裝飾器是一種很強大的語言特性,它可以讓我們在不修改原函數(shù)的情況下,對函數(shù)進行擴展和裝飾。
裝飾器是通過函數(shù)調用來實現(xiàn)的,它可以在函數(shù)定義的時候直接在函數(shù)名上使用@進行裝飾。裝飾器工作的原理是:把一個函數(shù)作為參數(shù)傳遞給裝飾器,裝飾器在函數(shù)外部實現(xiàn)一些功能,然后將原函數(shù)替換為經(jīng)過裝飾器處理過的函數(shù)。
# 定義一個裝飾器函數(shù) def my_decorator(func): def wrapper(): print("正在運行裝飾器...") func() print("停止運行裝飾器!") return wrapper # 定義一個函數(shù)并使用裝飾器進行裝飾 @my_decorator def say_hello(): print("Hello World!") # 調用已經(jīng)裝飾的函數(shù) say_hello()
上面的代碼中,my_decorator是一個裝飾器函數(shù),它實現(xiàn)在運行被裝飾的函數(shù)之前和之后打印一些信息。在定義say_hello函數(shù)時,使用@my_decorator裝飾器對其進行裝飾,say_hello函數(shù)將在運行前后自動調用my_decorator函數(shù)實現(xiàn)一些額外的功能。
另外需要注意的是,裝飾器在裝飾一個函數(shù)時,其實是用一個函數(shù)替換了原來的函數(shù),因此被裝飾的函數(shù)的元信息會被覆蓋,比如函數(shù)名和文檔字符串等。
本文只是對裝飾器作用的簡單介紹,實際上裝飾器還有很多復雜的應用場景,但是深入理解裝飾器特性是成為Python高級程序員的必備技能。