Python裝飾器Decorator的使用簡析

2021-08-21 07:51:36 字數 2957 閱讀 2477

裝飾器(decorator):

裝飾器的方便在於可以在不修改原**基礎上,新增其他功能。

例如,可以函式加乙個輸出函式執行時間的功能:

import math

import time

defdisplay_time

(func)

:#裝飾器也就是乙個函式

def(

*args)

:#再來乙個函式

t1 = time.time(

) res = func(

*args)

#引入func函式, 挺方便噠

t2 = time.time(

)print

("total time: s"

.format

(t2-t1)

)print

("total time: %.4f s %s king"

%(t2-t1,

'rng and rw'))

return res

defis_prime

(num)

:#判斷是不是素數

if num <2:

return

false

elif num <=3:

return

true

else

: tmp =

int(math.sqrt(num))+

1for i in

range(2

, tmp)

:if num % i ==0:

return

false

return

true

@display_time #裝飾器就是加一句這個**

defprime_num

(num)

: cnt =

0for i in

range(2

, num +1)

:if is_prime(i)

: cnt +=

1return cnt

cnt = prime_num(

100)

print

( cnt )

引數不定怎麼辦呢?

#帶有不定引數的裝飾器

import time

defdeco

(func)

:def

(*args,

**kwargs)

: starttime = time.time(

) func(

*args,

**kwargs)

endtime = time.time(

) msecs =

(endtime - starttime)

*1000

print

("time is %d ms"

%msecs)

@deco

deffunc

(a,b)

:print

("hello,here is a func for add :"

) time.sleep(1)

print

("result is %d"

%(a+b)

)@deco

deffunc2

(a,b,c)

:print

("hello,here is a func for add :"

) time.sleep(1)

print

("result is %d"

%(a+b+c)

)func(1,

2)func2(1,

2,3)

可以多用裝飾器嗎?

#多個裝飾器

import time

defdeco01

(func)

:def

(*args,

**kwargs)

:print

("this is deco01"

) starttime = time.time(

) func(

*args,

**kwargs)

endtime = time.time(

) msecs =

(endtime - starttime)

*1000

print

("time is %d ms"

%msecs)

print

("deco01 end here"

)def

deco02

(func)

:def

(*args,

**kwargs)

:print

("this is deco02"

) func(

*args,

**kwargs)

print

("deco02 end here"

)@deco01

@deco02

deffunc

(a,b)

:print

("hello,here is a func for add :"

) time.sleep(1)

print

("result is %d"

%(a+b)

)func(3,

4)'''this is deco01

this is deco02

hello,here is a func for add :

result is 7

deco02 end here

time is 1003 ms

deco01 end here

'''

Python基礎知識之裝飾器decorator

本質是函式,裝飾其他函式 為其他函式新增附加功能。不能修改被裝飾的函式的源 不能修改被裝飾的函式的呼叫方式 高階函式 巢狀函式 裝飾器 1.函式即 變數 定義乙個函式就相當於定義乙個變數,即將函式體賦值給乙個變數名。python的記憶體 機制規定 當儲存在記憶體中的內容沒有對應的變數名指定時,則當記...

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...