本文實(shí)例講述了python裝飾器常見使用方法。分享給大家供大家參考,具體如下:
python 的裝飾器,可以用來實(shí)現(xiàn),類似spring AOP 類似的功能。一樣可以用來記錄某個(gè)方法執(zhí)行前做什么,執(zhí)行后做什么,或者用來記錄日志,運(yùn)行的時(shí)間等,更有甚者,用這個(gè)來做權(quán)限攔截,也未嘗不可。從兩個(gè)方面來描述python 的裝飾模式:
1. 對普通方法的裝飾
2. 對在 class 類中的方法的裝飾,不需要給參數(shù)的情況
3. 對在 class 類中的方法的裝飾,需要給參數(shù)的情況
一,對普通方法的裝飾 。比如,要計(jì)算一個(gè)一個(gè)方法執(zhí)行的時(shí)間.
#coding:utf-8 import time def timeit(func): def wrapper(*args, **kv): start = time.clock() print '開始執(zhí)行' func(*args, **kv) end =time.clock() print '花費(fèi)時(shí)間:', end - start return wrapper @timeit def foo(): print 'in foo()' if __name__=='__main__': foo()
運(yùn)行結(jié)果:
開始執(zhí)行
in foo()
花費(fèi)時(shí)間: 6.55415628267e-05
可以看到,計(jì)算出了時(shí)間差。而不是像普通方法一樣,寫在一個(gè)函數(shù)里面實(shí)現(xiàn)。
二、對在 class 類中的方法的裝飾,不需要給參數(shù)的情況
#coding:utf-8 import time def timeit(func): def wrapper(*args, **kv): start = time.clock() print '開始執(zhí)行' func(*args, **kv) end =time.clock() print '花費(fèi)時(shí)間:', end - start return wrapper class MySpendTime(object): def __init__(self): pass @timeit def foo(self): print 'in foo()' spendtime=MySpendTime() spendtime.foo()
運(yùn)行結(jié)果:
開始執(zhí)行
in foo()
花費(fèi)時(shí)間: 4.42208134735e-05
三、對在 class 類中的方法的裝飾,需要給參數(shù)的情況
#coding:utf-8 ''' Created on 2012-11-1 @author: yihaomen.com ''' def UpdateUI(msg, step): print u"內(nèi)容:", 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()
運(yùn)行結(jié)果:
內(nèi)容: 開始第一步
步驟:到第1步了
內(nèi)容: 開始第二步
步驟:到第2步了
內(nèi)容: 開始第三步
步驟:到第3步了
Work1st
Work2nd
Work3rd
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
