python裝飾器 Python 裝飾器

2021-10-10 03:57:55 字數 856 閱讀 3859

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的**前提下給函式增加新的功能。 一般而言,我們要想拓展原來函式**,最直接的辦法就是侵入**裡面修改,例如:

這是我們最原始的的乙個函式,然後我們試圖記錄下這個函式執行的總時間,那最簡單的做法就是:

但是如果你的boss在公司裡面和你說:「這段**是我們公司的核心**,你不能直接去改我們的核心**。」那該怎麼辦呢,我們仿照裝飾器先自己試著寫一下:

這裡我們定義了乙個函式deco,它的引數是乙個函式,然後給這個函式嵌入了計時功能。然後你可以拍著胸脯對老闆說,看吧,不用動你原來的**,我照樣拓展了它的函式功能。然後你的老闆有對你說:「我們公司核心**區域有一千萬個func()函式,從func01()到func1kw(),按你的方案,想要拓展這一千萬個函式功能,就是要執行一千萬次deco()函式,這可不行呀,我心疼我的機器。」好了,你終於受夠你老闆了,準備辭職了,然後你無意間聽到了裝飾器這個神器,突然發現能滿足你的要求了。我們先實現乙個最簡陋的裝飾器,不使用任何語法糖和高階語法,看看裝飾器最原始的面貌:

所以這裡裝飾器就像乙個注入符號:有了它,拓展了原來函式的功能既不需要侵入函式內更改**,也不需要重複執行原函式。

然後你滿足了boss的要求後,boss又說:「我讓你拓展的函式好多可是有引數的呀,有的引數還是個數不定的那種,你的裝飾器搞的定不?」然後你嘿嘿一笑,深藏功與名!

最後,你的老闆說:「可以的,我這裡乙個函式需要加入很多功能,乙個裝飾器怕是搞不定,裝飾器能支援多個嘛」 最後你就把這段**丟給了他:

多個裝飾器執行的順序就是從最後乙個裝飾器開始,執行到第乙個裝飾器,再執行函式本身。盜用別人的例子:

輸出:

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...

python裝飾器作用 python裝飾器有什麼用

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 import time def func p...

python裝飾器解析 Python裝飾器詳解

按照 python 的程式設計原則,當乙個函式被定義後,如要修改或擴充套件其功能應盡量避免直接修改函式定義的 段,否則該函式在其他地方被呼叫時將無法正常執行。因此,當需要修改或擴充套件已被定義的函式的功能而不希望直接修改其 時,可以使用裝飾器。先來看乙個簡單的例子 def func1 functio...