裝飾器顧名思義就是用於乙個函式的二次加工。舉個例子,我們辛辛苦苦寫好了乙個函式結果現在我們需要加入新的功能,那麼這個時候請問你怎麼做。顯然重新去改一下**如果**量多的話是不划算的。或者說一需要對多個個函式增加同乙個功能,如果貼上複製顯然又是不太高效的這個時候就引入了裝飾器這種東東。
現在我們定義乙個函式
import time
defneed_change()
: time.sleep(2)
#讓它沉睡2秒
然後我們現在需要加入乙個計時功能,計算這個程式執行的時間。
改一下,變成這樣
import time
defneed_change()
: star=time.time(
) time.sleep(2)
#讓它沉睡2秒
end=time.time(
)print
(end-star)
很好,成功改動加入功能,那麼現在我還有10個這樣的程式需要新增這樣的功能怎麼辦。
我們的目的是為了得到乙個加入了功能的新函式,既然如此那麼就直接定義乙個函式並且這個函式可以返回乙個新函式。
def
decorate
(func)
:def
new_function()
: star=time.time(
) func(
) end=time.time(
)print
(end-star)
return new_function
這樣就可以看到我們直接返回乙個新的函式。
import time
defneed_change()
: time.sleep(2)
#讓它沉睡2秒
但是這裡要注意的是need_change函式其實已經不是原來的了,而是new_function這個函式。
不然你可以看看這段**;
import time
defneed_change()
: time.sleep(2)
#讓它沉睡2秒
defdecorate
(func)
:def
new_function()
: star=time.time(
) func(
) end=time.time(
)print
(end-star)
return new_function
print
('我是這個函式%s'
%need_change.__name__)
need_change= decorate(need_change)
need_change(
)print
('我是這個函式%s'
為了更方便一下我們可以在修改一下**。
import time
defdecorate
(func)
:def
new_function()
: star=time.time(
) func(
) end=time.time(
)print
(end-star)
return new_function
@decorate
defneed_change()
: time.sleep(2)
#讓它沉睡2秒
need_change(
)print
('我是這個函式%s'
%need_change.__name__)
這個符號@就相當於
need_change= decorate(need_change)
好了,就那麼多。 網路程式設計 Python高階語法 裝飾器
理論 裝飾器就是執行乙個函式之前首先執行裝飾器函式,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。1 單個裝飾器裝飾乙個函式 通用裝飾器看下面 def verify f...
Python語法糖 裝飾器
這裡用來記錄python各種甜得發膩的語法糖,以及各種變形用法。太初,神諭 pythonic import light,於是有了光。裝飾器是用來給函式增加新功能的,對於支援高階函式的語言,函式引數直接穿進去就好了。但是python提供了更為優雅的解決方案,只需要乙個 就能搞定。裝飾器函式需要單獨寫出...
Python語法糖 裝飾器
這裡用來記錄python各種甜得發膩的語法糖,以及各種變形用法。太初,神諭 pythonic import light,於是有了光。裝飾器是用來給函式增加新功能的,對於支援高階函式的語言,函式引數直接穿進去就好了。但是python提供了更為優雅的解決方案,只需要乙個 就能搞定。裝飾器函式需要單獨寫出...