一、裝飾器的作用是什麼?
在不改變原函式**的情況下,為函式新增功能。其實質就是在乙個函式中傳入乙個函式作為引數,返回乙個新的函式(高階函式)
我有乙個func函式,能列印資訊「this is func」
但我想在不修改原**的情況下,對func函式新增乙個功能:列印資訊「we are the best」
那麼我該怎麼做呢?
方法1:
或許我們可以另外頂乙個函式derc(),該函式接收乙個函式作為引數:
那我們呼叫derc(),並將func傳入,此時f指向了func()函式,則derc()中的f()等同於func()
那麼得到的效果如下,執行了函式derc()的列印語句,並將func()執行了,這樣達到了我們當初的目的,為func()函式
額外的新增功能,列印出「we are the best」:
疑問:如果我們有上百成千個類似func()的函式需要額外新增功能時,豈不是需要呼叫上百成千次的derc()?顯然這是不合
理的。那麼就要用到下面方法2中的裝飾器了
方法2:
用裝飾器來給函式新增功能:
在對func()函式進行@derc裝飾後,呼叫func()時,會先對將func傳給derc()函式,這樣f就指向了func
執行結果如下,是不是和方法1一樣?
疑問:那我原本的函式如果有引數時怎麼辦?
那derc函式中新定義的函式fn則需要接收引數,且接收引數可用萬能的引數(*args, **kwargs)即可
python裝飾器介紹 Python之裝飾器簡介
python函式式程式設計之裝飾器 1.開放封閉原則 簡單來說,就是對擴充套件開放,對修改封閉。在物件導向的程式設計方式中,經常會定義各種函式。乙個函式的使用分為定義階段和使用階段,乙個函式定義完成以後,可能會在很多位置被呼叫。這意味著如果函式的定義階段 被修改,受到影響的地方就會有很多,此時很容易...
python 找到裝飾器 Python之裝飾器
裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。裝飾器的作用 在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌 執行時間,登入認證等等。乙個簡單的裝飾器 import time def ...
Python之裝飾器
裝飾器就是乙個以函式作為引數並返回乙個替換函式的可執行函式 即裝飾器是乙個函式,其引數為函式,返回值也為函式 可理解為對函式的功能進行拓展,所以叫裝飾 outer為裝飾器,效果為給被裝飾函式返回值結果加負號 defouter fun definner x return fun x return in...