前言
python 的裝飾器能夠在不破壞函式原本結構的基礎上,對函式的功能進行補充。當我們需要對乙個函式補充不同的功能,可能需要用到多層的裝飾器。在我的使用過程中,遇到了兩種裝飾器層疊的情況,這裡把這兩種情況寫下來,作為踩坑記錄。
情況1def a(func):
def decorated_c(fune):
def decorated_e_by_ca(*args, **kwargs):
out = func(fune)(*args, **
return out +' > decorated by a'
return decorated_e_by_ca
return decorated_c
@adef c(fune):
def decorated_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),還有bzhijikke(str) = a(c)(e)(str)。這麼一來他們的關係就明確了,裝飾器 a 裝飾的是裝飾器 c,它返回了乙個被裝飾過的裝飾器,而被裝飾過的裝飾器又可以去裝飾函式 e。在上面的**中,decorated_c 就是乙個被裝飾過的裝飾器。
情況2def a(fune_decorated_by_c):
def redecorated_e(str):
return fune_decorated_by_c(str)+' > redecorated by a'
return redecorated_e
def c(fune):
def decorated_e(str):
return fune(str)+' > decorated by c'
return程式設計客棧 decorated_e
@a@c
def e程式設計客棧(str):
return str
print e('a string is ')
這種情況下,有e(str) = a(c(e))(str)。首先裝飾器 c 裝飾函式 e,返回乙個被 c 裝飾過的函式,然後裝飾器 a 再裝飾這個被 c 裝飾過的函式。與第一種情況的區別是,這裡的裝飾器 a 裝飾的是乙個函式,而不是乙個裝飾器。
Python 多層裝飾器
python 的裝飾器能夠在不破壞函式原本結構的基礎上,對函式的功能進行補充。當我們需要對乙個函式補充不同的功能,可能需要用到多層的裝飾器。在我的使用過程中,遇到了兩種裝飾器層疊的情況,這裡把這兩種情況寫下來,作為踩坑記錄。def a func defdecorated c fune defdeco...
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 ...
python之有參裝飾器和迭代器用法
1.有參裝飾器 是無參裝飾器的加強版 在無參裝飾器上面再包個函式 相當於多增加乙個值 無參裝飾器函例圖 def check func index 執行的先執行 check check index 把index記憶體位址賦值給func 得到check user記憶體位址返回值並賦值新的index變數名...