1:裝飾器本質是函式,功能是裝飾其他函式,即為其它函式新增附加功能。
2:裝飾器需要遵循的原則:(1).
不能修改被裝飾函式的源**、(2).不能修改被裝飾函式的呼叫方式、即總結起來裝飾器對被裝飾的函式是完全透明的。
3.特定場景:假如現在有10個函式,每個函式都有自己要完成的功能,呼叫的時候怎麼呼叫呢?即test1()、test2()….test10()很簡單,現在有乙個需求:將test1至test10增加乙個新的功能,新功能為增加紀錄日誌的功能,怎麼做呢,只能乙個乙個函式將紀錄日誌的功能加進去,學習了函式之後貌似比較高階了,怎麼做呢,可以這樣做,定義乙個列印日誌的函式,然後在test1至test10中呼叫這個函式即可,避免了寫過多重複**。
5:一段可以統計函式執行時間的裝飾器
#author:ju bo
import
time
deftimmer(func):
def warpper(*args,**kwargs):
start_time=time.time()
func()
stop_time=time.time()
print("
the func run time is %s
"%(stop_time-start_time))
return
warpper
@timmer
deftest1():
time.sleep(3)
print("
in the test1")
test1()
6:要實現這樣乙個裝飾器的功能需要哪些知識呢?
(1):函式即變數
(2):高階函式
(3):巢狀函式
最終高階函式+巢狀函式=裝飾器
由於裝飾器比較複雜,暫時寫到這裡,後續所有內容均會補上,需要跟讀貼溫馨提醒關注一下。
day9 函式基礎知識,裝飾器
個人理解裝飾器 無參裝飾器 功能用來拓展函式 為原函式新增其他功能 原則 1 原始碼不動 2 呼叫方式不變 1 既要新增新功能又要保持原函式 不變,那麼只能重新寫乙個函式 以outer函式為例 將原函式傳入outer函式中,然後在outer函式中新增新功能拓展函式,函式的呼叫巢狀 2 但是有要求呼叫...
python基礎知識整理 裝飾器
最簡裝飾器 def deco func def wrap args,kwargs return func args,kwargs return wrap deco def foo a,b return a b原理 對比被裝飾前後的foo.name 和foo.doc from functools im...
Python基礎知識之裝飾器decorator
本質是函式,裝飾其他函式 為其他函式新增附加功能。不能修改被裝飾的函式的源 不能修改被裝飾的函式的呼叫方式 高階函式 巢狀函式 裝飾器 1.函式即 變數 定義乙個函式就相當於定義乙個變數,即將函式體賦值給乙個變數名。python的記憶體 機制規定 當儲存在記憶體中的內容沒有對應的變數名指定時,則當記...