在呼叫函式時,可以對一些重複的功能進行包裝。例如,當計算乙個函式的執行時間時,需要記錄開始呼叫的時刻和返回的時刻,並進行相減得到時間。如果重複進行多次,則需要做多個這種操作。為了簡化這一過程,可使用裝飾器。如
def
timmer
(func)
:def()
: start_time = time.time(
) func(
) stop_time = time.time(
)print
("執行時間是 %s 秒 "
%(stop_time - start_time)
)@timmer
defwait()
: time.sleep(3)
# 呼叫
wait(
)
其中,timmer()
採用了函式閉包的形式。當呼叫wait()
函式時,會去呼叫timmer()
函式,並把wait()
函式傳遞進去。此舉也簡化了函式閉包的呼叫過程。
在上面的例子中,wait()
函式並沒有引數,下面通過乙個計算和的例子來說明帶引數的情況。
def
tips
(func)
:def
sum(a, b)
:print
('a + b'
) func(a, b)
return
sum
@tips
defadd
(a, b)
:print
(a + b)
# 呼叫
add(4,
5)
當裝飾器帶上了引數可以做更多的事情,如
def
tips
(ar**)
:def
f(func)
:def
add_or_sub
(a, b)
:print
(ar**)
func(a, b)
return add_or_sub
return f
@tips(
'add'
)def
add(a, b)
:print
(a + b)
@tips(
'sub'
)def
sub(a, b)
:print
(a - b)
# 呼叫
add(6,
2)# add 8
sub(6,
2)# sub 4
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...
python 裝飾器 函式裝飾器 類裝飾器
python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...
python裝飾器 裝飾器工廠函式
使用裝飾器實現如下所示的列印 小白聯盟def printequel func1 def inner1 print 15 func1 return inner1 def printstar func2 def inner2 print 15 func2 return inner2 printequel...