python 找到裝飾器 Python之裝飾器

2021-10-22 11:19:52 字數 2408 閱讀 1814

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何**變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。

裝飾器的作用:在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌、執行時間,登入認證等等。

乙個簡單的裝飾器:

import time

def func1():

print('晚上回家吃飯!')

time.sleep(1)

def func2():

print("晚上不回家吃飯!")

time.sleep(1)

def timer(f1):

star_time = time.time()

f1()

end_time = time.time()

print('耗時:%s'%(end_time-star_time))

f = func1

func1 = timer

func1(f)

import time

def func1():

print('晚上回家吃飯!')

time.sleep(1)

def func2():

print("晚上不回家吃飯!")

time.sleep(1)

def timer(f1): # f1 = func1

def inner():

star_time = time.time()

f1()

end_time = time.time()

print('耗時:%s'%(end_time-star_time))

return inner

func1 = timer(func1) #實際返回inner

func1() #相當於執行inner()

但是如果有多個函式,我都想讓你測試他們的執行時間,你每次是不是都得func1 = timer(func1)?這樣還是有點麻煩,

因為這些函式的函式名可能是不相同,有func1,func2,graph,等等,所以更簡單的方法,python給你提供了,那就是語法糖。

import time

def timer(f1):

def inner():

star_time = time.time()

f1()

end_time = time.time()

print('耗時:%s'%(end_time-star_time))

return inner

@timer #相當於 func1 = timer(func1) 返回inner

def func1():

print('晚上回家吃飯!')

time.sleep(1)

func1()

帶引數的裝飾器:

import time

def timer(f1): #f1 = func1

def inner(*args,**kwargs):

star_time = time.time()

f1(*args,**kwargs)

end_time = time.time()

print('耗時:%s'%(end_time-star_time))

return inner

@timer #相當於 func1 = timer(func1) 返回inner

def func1(a,b):

print(a,b)

print('晚上回家吃das 飯!')

time.sleep(1)

func1(11,22) #相當於執行inner(11,22)

帶返回值的裝飾器

import time

def timer(f1):

def inner(*args,**kwargs):

star_time = time.time()

'''上面的**是執行函式之前的操作'''

ret = f1(*args,**kwargs)

'''下面的部分是執行函式之後的操作'''

end_time = time.time()

print('耗時:%s'%(end_time-star_time))

return ret

return inner

@timer #相當於 func1 = timer(func1) 返回inner

def func1(a,b):

print(a,b)

print('晚上回家吃das 飯!')

time.sleep(1)

return 666

print(func1(11,22)) #相當於執行inner(11,22)

執行結果

11 22

晚上回家吃das 飯!

耗時:1.0000572204589844

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 函式的...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...