裝飾器是乙個函式物件:它接收乙個函式引數,將這個函式封裝為乙個新的函式後進行返回
裝飾器語法在python是一種語法糖(func1 = some_decorate(func1)),
比如:
@some_decorate
deffunc1()
:print(1
)
實際上相當於
def
func1()
:print(1
)func1 = some_decorate(func1)
這就對裝飾器的寫法有了要求,裝飾器函式相當於接受乙個函式,加上前後語法,返回封裝後的函式,比如可以這麼寫:
def
some_decorate
(f):
def(
*args,
**kwargs)
:print
("before f"
) ret = f(
*args,
**kwargs)
print
("after f"
)return ret
deffunc1
(text)
:print
(text)
return
0# 下面的語法
@some_decorate
deffunc1
(text)
:print
(text)
return
0# 相當於:
func1 = some_decorate(func1)
如果裝飾器需要接受引數,則需要進一步巢狀:
def
some_decorate
(title)
:def
inner_func1
(f):
def(
*args,
**kwargs)
:print
("%s: before f"
%(title,))
ret = f(
*args,
**kwargs)
print
("%s: after f"
%(title,))
return ret
return inner_func1
deffunc1
(text)
:print
(text)
return
0func1=some_decorate(
"title1"
)(func1)
@some_decorate(
"title1"
)def
func1
(text)
:print
(text)
return
0
或者通過如下方式:
def
(f, title)
:def
(*args,
**kwargs)
:print
("%s before f"
%title)
ret = f(
*args,
**kwargs)
print
("%s after f"
%title)
return ret
defsome_decorate
(title)
:def
inner_func
(f):
return inner_func
deffunc1
(text)
:print
(text)
return
0func1 = some_decorate(
"title2"
)(func1)
@some_decorate(
"title3"
)def
func1
(text)
:print
(text)
return
0
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...