實驗一:
#!/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 要理解上述 的含義,我們從自定義函式裝...