本文實例講述了python裝飾器常見使用方法。分享給大家供大家參考,具體如下:
python 的裝飾器,可以用來實現,類似spring AOP 類似的功能。一樣可以用來記錄某個方法執行前做什么,執行后做什么,或者用來記錄日志,運行的時間等,更有甚者,用這個來做權限攔截,也未嘗不可。從兩個方面來描述python 的裝飾模式:
1. 對普通方法的裝飾
2. 對在 class 類中的方法的裝飾,不需要給參數的情況
3. 對在 class 類中的方法的裝飾,需要給參數的情況
一,對普通方法的裝飾 。比如,要計算一個一個方法執行的時間.
#coding:utf-8
import time
def timeit(func):
def wrapper(*args, **kv):
start = time.clock()
print '開始執行'
func(*args, **kv)
end =time.clock()
print '花費時間:', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
if __name__=='__main__':
foo()
運行結果:
開始執行
in foo()
花費時間: 6.55415628267e-05
可以看到,計算出了時間差。而不是像普通方法一樣,寫在一個函數里面實現。
二、對在 class 類中的方法的裝飾,不需要給參數的情況
#coding:utf-8
import time
def timeit(func):
def wrapper(*args, **kv):
start = time.clock()
print '開始執行'
func(*args, **kv)
end =time.clock()
print '花費時間:', end - start
return wrapper
class MySpendTime(object):
def __init__(self):
pass
@timeit
def foo(self):
print 'in foo()'
spendtime=MySpendTime()
spendtime.foo()
運行結果:
開始執行
in foo()
花費時間: 4.42208134735e-05
三、對在 class 類中的方法的裝飾,需要給參數的情況
#coding:utf-8
'''
Created on 2012-11-1
@author: yihaomen.com
'''
def UpdateUI(msg, step):
print u"內容:", msg
print u"步驟:到第%s步了" % step
def dec(func):
def wapper(self, *args, **kwargs):
func(self,*args, **kwargs)
return wapper
return dec
class Command(object):
def Excute(self):
self.Work1st()
self.Work2nd()
self.Work3rd()
@UpdateUI("開始第一步","1")
def Work1st(self):
print "Work1st"
@UpdateUI("開始第二步", 2)
def Work2nd(self):
print "Work2nd"
@UpdateUI("開始第三步", 3)
def Work3rd(self):
print "Work3rd"
if __name__=="__main__":
command = Command()
command.Excute()
運行結果:
內容: 開始第一步
步驟:到第1步了
內容: 開始第二步
步驟:到第2步了
內容: 開始第三步
步驟:到第3步了
Work1st
Work2nd
Work3rd
更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

