python 的裝飾器能夠在不破壞函式原本結構的基礎上,對函式的功能進行補充。當我們需要對乙個函式補充不同的功能,可能需要用到多層的裝飾器。在我的使用過程中,遇到了兩種裝飾器層疊的情況,這裡把這兩種情況寫下來,作為踩坑記錄。
def
a(func):
defdecorated_c
(fune):
defdecorated_e_by_ca
(*args, **kwargs):
out = func(fune)(*args, **kwargs)
return out +' > decorated by a'
return decorated_e_by_ca
return decorated_c
@adef
c(fune):
defdecorated_e_by_c
(str):
return fune(str)+' > decorated by c'
return decorated_e_by_c
@cdef
e(str):
return str
print e('a string is ')
這種情況下首先 e(str) = c(e)(str),然後由於c = a(c),還有 e(str) = a(c)(e)(str)。這麼一來他們的關係就明確了,裝飾器 a 裝飾的是裝飾器 c,它返回了乙個被裝飾過的裝飾器,而被裝飾過的裝飾器又可以去裝飾函式 e。在上面的**中,decorated_c 就是乙個被裝飾過的裝飾器。
def
a(fune_decorated_by_c):
defredecorated_e
(str):
return fune_decorated_by_c(str)+' > redecorated by a'
return redecorated_e
defc
(fune):
defdecorated_e
(str):
return fune(str)+' > decorated by c'
return decorated_e
@a@c
defe
(str):
return str
print e('a string is ')
這種情況下,有 e(str) = a(c(e))(str)。首先裝飾器 c 裝飾函式 e,返回乙個被 c 裝飾過的函式,然後裝飾器 a 再裝飾這個被 c 裝飾過的函式。與第一種情況的區別是,這裡的裝飾器 a 裝飾的是乙個函式,而不是乙個裝飾器。 python 多層裝飾器
25 多層裝飾器 1 原理 執行順序從上往下,2和 3組成乙個函式假設為nf1,1和nf1組成乙個函式nnf1 f1成為ck ty of us的inner函式即nf1。nf1成為check login的inner函式即nnf1。詳細參照alex的多層裝飾器講解。1 check login 2 ck ...
多層裝飾器例子
def outter1 func1 print 載入了outter1 print res1 func1 args,kwargs return res1 return defoutter2 func2 print 載入了outter2 print res2 func2 return res2 retu...
多層裝飾器的執行問題
首先講到多層裝飾器的時候老師都會這麼說 多個裝飾器的呼叫順序是自下往上,但是執行時的執行順序是自上往下!但是呢,我們並不知道為什麼是這樣的,於是抱著求真務實,積極努力,奮發圖強的精神。我反覆試了 設定斷點,看看內部到底發生了啥 先把測試用的 放上來 def decorator a func prin...