裝飾器原理分析

2021-09-27 12:49:03 字數 1563 閱讀 6951

實驗一:

#!/usr/local/bin/python3

deff

(name)

:print

(name)

defh

(fun)

:print

(fun.__name__)

defg()

:print

("jack"

)return fun(

)return g

return h

@f("bob"

)def

fun1()

:print

("####fun1"

)return

@f("tina"

)def

fun2()

:return

if __name__ ==

"__main__"

: fun1(

)

上述**執行結果:

bobfun1

tina

fun2

jack

####fun1

從執行結果可以看出:在沒有執行fun1()函式前,就已經對裝飾器函式f()內的print(name),以及f中h()函式的print(f.name)進行了執行,然後才執行了fun1()。

將**修改為:

實驗二

#!/usr/local/bin/python3

deff

(name)

:print

(name)

defh

(fun)

:print

(fun.__name__)

fun(

)defg(

):print

("jack"

)return g

return h

@f("bob"

)def

fun1()

:print

("####fun1"

)return

@f("tina"

)def

fun2()

:print

("########fun2"

)return

if __name__ ==

"__main__"

: fun1(

)```

輸出結果為:

bobfun1

####fun1

tina

fun2

#####fun2

jack

ps:函式具有區域性性,只對呼叫的函式生效,只定義不呼叫不會生效

所以綜合以上的結果分析,裝飾器的執行過程:

首先對每乙個裝飾器進行執行,直到執行到將函式變數作為function引數的就位裝飾器函式;如果該function引數直接在函式內進行執行,則對所有帶裝飾器的函式進行執行,然後在執行後續**;如果該function引數作為函式的返回值時,則執行主函式,遇到有被裝飾器裝飾的函式,則對該裝飾器函式進行執行。試驗一中g()作為裝飾器的裝飾函式。

裝飾器原理

裝飾器,原理 開放封閉原則 def outer func func 原來的f1函式 def inner args,kwargs args,kwargs裝飾器就這麼寫,可以應對多個引數 print ok1 r func args,kwargs r等於none print ok2 return r re...

Python裝飾器原理分析和案例

裝飾器部分 裝飾器是可呼叫的物件,其引數是另乙個函式 被裝飾的函式 裝飾器可能會處理被裝飾的函式,將它返回 或者將其替換成另乙個函式或者可呼叫的物件。decorate def target print running target 以上例子,通過裝飾器之後,實際執行的是如下方法 def target...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...