Python 多層裝飾器

2021-07-31 14:58:29 字數 1370 閱讀 1636

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...