裝飾器:用於修改其他函式功能的物件,python裡一切都是物件,顧裝飾器可以是函式也可以是類(單個函式接收裝飾器,通過類可以實現多個功能,再通過繼承可以實現增強功能)。一般用於許可權驗證和日誌記錄模組。
函式裝飾器:
import time
from functools import wraps
# 計算函式的執行時間
defuse_time
(f):
@wraps(f)
definner()
: start_time = time.time(
)print
(f.__name__ +
'正在要執行'
) f(
) end_time = time.time(
)print(.
format
(name=f.__name__,s=end_time - start_time)
)return inner
# 呼叫裝飾器
@use_time
defpt()
: time.sleep(1)
print
("我執行中"
)pt(
)
類裝飾器:
import time
from functools import wraps
class
func_log
:def
__init__
(self, filename=
'out.txt'):
self.startime = time.time(
) self.endtime =
none
self.filename = filename
self.
str=
none
# 重寫call函式,實現類作為裝飾器的關鍵所在
def__call__
(self, func)
: @wraps(func)
defuse_time()
: self.
str=
"正要執行:"
.format
(name=func.__name__)
self.startime = time.time(
) func(
) self.endtime = time.time(
) self.new_func(
) self.sen_mail(
)return use_time
defnew_func
(self)
:print
('可新增新的功能'
)with
open
(self.filename,
'a')
as log:
log.write(self.
str+
'\n'
) log.write(
'本次日誌記錄完畢'
)print
('已經新增新的功能'
)def
sen_mail
(self)
:pass
class
func_log_pro
(func_log)
:def
__init__
(self, mail,
*args,
**kwargs)
: self.mail = mail
super
(func_log_pro, self)
.__init__(
*args,
**kwargs)
defsen_mail
(self)
:print(.
format
(mail=self.mail)
)# @func_tmie('mylog.txt')
@ func_log_pro(
,'mylog.txt'
)defpt(
):time.sleep(1)
print
('我要列印'
)if __name__ ==
'__main__'
: pt(
)
Python深入學習筆記(二)
計數器counter counter類是自python2.7起增加的,屬於字典類的子類,是乙個容器物件,主要用來統計雜湊物件,支援集合操作 其中後兩項分別返回兩個counter物件各元素的最小值和最大值。from collections import counter c counter succes...
python裝飾器以及裝飾器的深入
1.通 裝飾器回顧 通過裝飾器的模板格式 def fn def inner args,kwargs 增加的內容 ret fn args,kwargs 增加的內容 return ret return inner2.函式的有 資訊 1 獲取函式的注釋資訊,示例 def fun a,b,c 函式的功能 p...
Python深入05 裝飾器
裝飾器 decorator 是一種高階python語法。裝飾器可以對乙個函式 方法或者類進行加工。在python中,我們有多種方法對函式和類進行加工,比如在python閉包中,我們見到函式物件作為某乙個函式的返回結果。相對於其它方式,裝飾器語法簡單,可讀性高。因此,裝飾器在python專案中有廣泛的...