1、裝飾器最初的形成
import time
deftimer
(func)
:#timer是裝飾器函式
definner()
:print
(time.time())
func(
)#f是被裝飾的函式
time.sleep(
0.01
)print
(time.time())
return inner
deffun()
:print
('哇哈哈哈ha'
)fun=timer(fun)
#把inner的記憶體位址賦值給變數fun
fun(
)#裝飾器的作用 —— 不想修改函式的呼叫方式 但是還想在原來的函式前後新增功能
#timer就是乙個裝飾器函式,只是對乙個函式 有一些裝飾作用
2、裝飾器函式
import time
deftimer
(func)
:#timer是裝飾器函式
definner()
:print
(time.time())
func(
) time.sleep(
0.01
)print
(time.time())
return inner
@timer #語法糖 @裝飾器函式名
deffun()
:#f是被裝飾的函式
print
('哇哈哈哈ha'
)#fun=timer(fun)#把inner的記憶體位址賦值給變數fun
fun(
)
3、帶返回值的裝飾器
def
timmer
(f):
#裝飾器函式
definner()
: start = time.time(
) ret = f(
)#被裝飾的函式
end = time.time(
)print
(end - start)
return ret
return inner
@timmer #語法糖 @裝飾器函式名
deffunc()
:#被裝飾的函式
time.sleep(
0.01
)print()
return
'新年好'
#func = timmer(func)
ret = func(
)#inner()
print
(ret)
#裝飾帶引數函式的裝飾器
deftimmer
(f):
#裝飾器函式
definner
(*args,
**kwargs)
:#(1,2) /(1)
start = time.time(
) ret = f(
*args,
**kwargs)
#f(1,2) #被裝飾的函式
end = time.time(
)print
(end - start)
return ret
return inner
@timmer #語法糖 @裝飾器函式名
deffunc
(a,b)
:#被裝飾的函式
time.sleep(
0.01
)print
(,a,b)
return
'新年好'
@timmer #語法糖 @裝飾器函式名
deffunc1
(a):
#被裝飾的函式
time.sleep(
0.01
)print
(,a)
return
'新年好'
#func = timmer(func)
ret = func(1,
2)#inner()
ret = func(
1,b =2)
#inner()
print
(ret)
4、裝飾器的固定格式
def
(f):
#裝飾器函式,f是被裝飾的函式
definner
(*args,
**kwargs)
:'''在被裝飾函式之前要做的事'''
ret = f(
*args,
**kwargs)
#被裝飾的函式
'''在被裝飾函式之後要做的事'''
return ret
return inner
deffunc
(a,b)
:#被裝飾的函式
time.sleep(
0.01
)print
(,a,b)
return
'新年好'
總結
# 裝飾器
# 開發原則 : 開放封閉原則
# 裝飾器的作用 :在不改變原函式的呼叫方式的情況下,在函式的前後新增功能
# 裝飾器的本質 : 閉包函式
def(func)
:def
inner
(*args,
**kwargs)
:print
('在被裝飾的函式執行之前做的事'
) ret = func(
*args,
**kwargs)
print
('在被裝飾的函式執行之後做的事'
)return ret
return inner
defholiday
(day)
:print
('全體放假%s天'
%day)
return
'好開心'
ret = holiday(3)
print
(ret)
python函式之一 裝飾器
裝飾器的語法以 開始,接著是裝飾器函式的名字和可選的引數。緊接著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。如下 decorator dec opt args def functobedecorated func opt args 對於多個裝飾器,使用數學定義表示如下 g.f x g f x 對...
python三大神器之一裝飾器
裝飾器的作用 在不改變原函式的情況下給函式增加功能!裝飾器由閉包和語法糖組成 閉包 即兩個函式巢狀,外部函式返回內部函式的引用,外部函式一定會傳入引數,外部函式起的是交換引用的作用 把要裝飾的引數 也就是裝飾前的函式 與 裝飾後的函式的引用對換,而里層的函式做的是執行操作,呼叫原函式就是在這裡執行的...
讀《大話設計模式》學習小結(一)裝飾器模式
前言,作為個人總結設計模式學習的第一篇文章,我們先說點別的。設計模式在早以前我就有在看,並且部分模式也做了對應的總結。故前 三 四篇的內容將是我之前做的總結,現在放到部落格上。或許是因為看 大話設計模式 而做總結的原因,自身也受其影響,在總結中也會帶有些生活的元素。此外,我還會配上自己寫的例項 以方...