一 裝飾器基礎

2021-09-09 05:50:17 字數 3163 閱讀 5470

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三大神器之一裝飾器

裝飾器的作用 在不改變原函式的情況下給函式增加功能!裝飾器由閉包和語法糖組成 閉包 即兩個函式巢狀,外部函式返回內部函式的引用,外部函式一定會傳入引數,外部函式起的是交換引用的作用 把要裝飾的引數 也就是裝飾前的函式 與 裝飾後的函式的引用對換,而里層的函式做的是執行操作,呼叫原函式就是在這裡執行的...

讀《大話設計模式》學習小結(一)裝飾器模式

前言,作為個人總結設計模式學習的第一篇文章,我們先說點別的。設計模式在早以前我就有在看,並且部分模式也做了對應的總結。故前 三 四篇的內容將是我之前做的總結,現在放到部落格上。或許是因為看 大話設計模式 而做總結的原因,自身也受其影響,在總結中也會帶有些生活的元素。此外,我還會配上自己寫的例項 以方...