python的裝飾器是python語言的一道難關,希望我能過關。再次不對裝飾器進行過多的說明,通過簡單的例子來了解裝飾器的使用。
在python中我們時常需要列印函式的名字。
我們可以在呼叫該函式的地方列印該函式的名字。我們進行下面的寫法:
def getsum(x,y):
return x+y
def prinf(x,y):
print getsum.name
print getsum(x,y)
prinf(4,5)
getsum
9但是這種寫法看起來,**會很臃腫,而且很不簡潔。
我們這裡可以使用裝飾器來進行函式名字的列印。我們在需要列印函式名字的加上裝飾器。**如下:
def getfuncname(func):
def f(*args,**kwargs):
print func.name
return func(*args,**kwargs)
return f
@getfuncname
def getsum(x,y):
return x+y
def prinf(x,y):
print getsum(x,y)
prinf(4,5)
getsum
9這樣我們就列印了函式的名字。這樣任何函式呼叫該函式都會列印該函式的名字,免得呼叫的每個函式都要寫函式的名字。方便了很多。
我們有時候需要知道函式的執行效率(執行時間),我們可以使用timeku實現來對函式的計時。**如下:
def func(x,y):
sum=0;
for i in range(1,x):
for j in range(1,y):
sum+=j
return sum
start=time.time()
func(10,1000)
print time.time()-start
0.000999927520752
但是我們有時候需要知道函式在各個不同大小資料下的執行時間,那麼就需要我們,多次利用time庫來對函式時間進行計算。很不方便
我們可以利用裝飾器,寫乙個簡單的計時函式,來計算函式的執行時間。**如下:
def calc_time(func):
def time_calc(*args,**kwargs):
t1 = time.time()
func(*args,**kwargs)
print time.time()-t1
return time_calc
@calc_time
def func(x,y):
sum=0
for i in range(1,x):
for j in range(1,y):
sum+=j
func(10,1000)
0.000999927520752
這樣在對函式進行多次統計效率的時候,就可以直接列印函式的執行時間了。
for func in registy:
print func()
通過裝飾器,我們對一些函式進行註冊,簡單易用方便
P強大的裝飾器
1 什麼是python函式裝飾器 下文簡稱裝飾器 裝飾器實際上就是乙個函式。這個函式有兩個特別之處 引數是乙個函式,返回值也是乙個函式。2 從乙個簡單案例了解裝飾器的使用 在所有函式執行的時候,都要列印 xx函式執行了。如add 列印add函式執行了。from functools import wr...
python 驗證功能的裝飾器示例
user list current dict defauth auth type defauth func func print 認證型別 auth type if auth type filedb if current dict username and current dict login 判斷...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...