Python多層裝飾器用法例項分析

2022-10-04 20:21:37 字數 1232 閱讀 5444

前言

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變數名...