四、裝飾器的執行順序:
定義:python的裝飾器:裝飾原有的函式,用於拓展原來函式功能的一種函式,在不更改原來函式**的基礎上,增加函式的功能。
格式:@ 符號就是裝飾器的語法糖,它放在函式開始定義的地方,這樣就可以省略最後一步再次賦值的操作。
裝飾器的返回值也是乙個函式/類物件。它經常用於有切面需求的場景,比如:插入日誌、效能測試、事務處理、快取、許可權校驗等場景,裝飾器是解決這類問題的絕佳設計。
裝飾器的具體詳解可學習此鏈結
1、函式裝飾器
用@函式名,裝飾器可以巢狀函式,分為裝飾器帶引數和不帶引數的。用法可參照以下**使用。
**引用自:
def
demo1
(demo_name)
:def
(fun)
:print
(demo_name,
) fun(
)# end def
deftest()
:print
(demo_name,
"test"
)# end def
test # 呼叫test方法,此處不能加()。
# end def(demo)
defdemo2
(demo_name)
:#可以建立巢狀的函式,函式也能返回函式
def(func)
:def
callback
(*args,
**kwargs)
:print
(demo_name,
"callback"
)return func(
*args,
**kwargs)
return callback
# end def
deftest
(item)
:print
(demo_name,
"test"
, item)
# end def
test(
"hello"
)# 呼叫test方法
# end def(demo)
defdemo3
(demo_name)
:def
decorate
(tip)
:def
(func)
:def
callback
(*args,
**kwargs)
:print
(demo_name, tip)
return func(
*args,
**kwargs)
return callback
# end def(decorate)
@decorate(
"something"
)# 帶引數的裝飾器
deftest
(item)
:print
(demo_name,
"test"
, item)
# end def
test(
"hello"
)# 呼叫test方法
# end def(demo)
if __name__ ==
'__main__'
: demo1(
"demo1"
)print()
# 被裝飾函式傳參
demo2(
"demo2"
)print()
# 裝飾器傳參
demo3(
"demo3"
)print
()
2、類裝飾器:class
foo(
object):
def__init__
(self, func)
: self._func = func
def__call__
(self)
:print
('class decorator runing'
) self._func(
)print
('class decorator ending'
)@foo
defbar()
:print
('bar'
)bar(
)functools.wraps
**引用自:
乙個函式還可以同時定義多個裝飾器,從內向外的呼叫,執行順序是從裡到外,最先呼叫最裡層的裝飾器,最後呼叫最外層的裝飾器
@a
@b@c
deff()
:pass
等價於:
f = a(b(c(f)
))
python中的裝飾器
其實去年就開始學python了,零零散散,陸陸續續學了點,期間學習了python web開發,爬蟲系統 但是一些基礎性的知識點長時間不看了就會忘,所以寫個部落格記錄下來,忘了可以隨時檢視,不用回去看 了,希望也能幫助大家學習哈。python中的裝飾器decorator其實是乙個高階函式,它接受乙個函...
Python 中的裝飾器
1.基本概念 問題 裝飾器是什麼?解答 嚴格來說,裝飾器只是語法糖,裝飾器是可呼叫的物件,可以像常規的可呼叫物件那樣呼叫,特殊的地方是裝飾器的引數是乙個函式 問題 裝飾器有什麼特性?解答 裝飾器有 個特性,一是可以把被裝飾的函式替換成其他函式,二是可以在載入模組時候立即執行 def decorate...
python中的 裝飾器
示例 def fun a arg print a arg fun a deffun b print b 輸出 c python34 python.exe c users administrator desktop test.pyab process finished with exit code 0...