python裝飾器常見使用方法分析
本文實例講述了python裝飾器常見使用方法。分享給大家供大家參考,具體如下:
python 的裝飾器,可以用來實現(xiàn),類似spring AOP 類似的功能。一樣可以用來記錄某個方法執(zhí)行前做什么,執(zhí)行后做什么,或者用來記錄日志,運行的時間等,更有甚者,用這個來做權限攔截,也未嘗不可。從兩個方面來描述python 的裝飾模式:
1. 對普通方法的裝飾
2. 對在 class 類中的方法的裝飾,不需要給參數(shù)的情況
3. 對在 class 類中的方法的裝飾,需要給參數(shù)的情況
一,對普通方法的裝飾。比如,要計算一個一個方法執(zhí)行的時間.
#coding:utf-8 import time def timeit(func): def wrapper(*args, **kv): start = time.clock() print '開始執(zhí)行' func(*args, **kv) end =time.clock() print '花費時間:', end - start return wrapper @timeit def foo(): print 'in foo()' if __name__=='__main__': foo()
運行結(jié)果:
開始執(zhí)行
in foo()
花費時間: 6.55415628267e-05
可以看到,計算出了時間差。而不是像普通方法一樣,寫在一個函數(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 '花費時間:', end - start return wrapper class MySpendTime(object): def __init__(self): pass @timeit def foo(self): print 'in foo()' spendtime=MySpendTime() spendtime.foo()
運行結(jié)果:
開始執(zhí)行
in foo()
花費時間: 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()
運行結(jié)果:
內(nèi)容: 開始第一步
步驟:到第1步了
內(nèi)容: 開始第二步
步驟:到第2步了
內(nèi)容: 開始第三步
步驟:到第3步了
Work1st
Work2nd
Work3rd
更多關于Python相關內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Python數(shù)據(jù)容器dict(字典)的實現(xiàn)
本文主要介紹了Python數(shù)據(jù)容器dict(字典)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02Python+ChatGPT實現(xiàn)5分鐘快速上手編程
最近一段時間chatGPT火爆出圈!無論是在互聯(lián)網(wǎng)行業(yè),還是其他各行業(yè)都賺足了話題。俗話說:“外行看笑話,內(nèi)行看門道”,今天從chatGPT個人體驗感受以及如何用的角度來分享一下2023-02-02Python標準庫urllib2的一些使用細節(jié)總結(jié)
這篇文章主要介紹了Python標準庫urllib2的一些使用細節(jié)總結(jié),本文總結(jié)了Proxy 的設置、Timeout 設置、Redirect、Cookie等細節(jié)的使用,需要的朋友可以參考下2015-03-03tensorflow2 自定義損失函數(shù)使用的隱藏坑
本文主要介紹了tensorflow2 自定義損失函數(shù)使用的隱藏坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-07-07Python根據(jù)指定日期計算后n天,前n天是哪一天的方法
這篇文章主要介紹了Python根據(jù)指定日期計算后n天,前n天是哪一天的方法,涉及Python日期與時間計算相關操作技巧,需要的朋友可以參考下2018-05-05Python將字符串常量轉(zhuǎn)化為變量方法總結(jié)
在本篇內(nèi)容里我們給大家整理了一篇關于Python將字符串常量轉(zhuǎn)化為變量方法的知識點總結(jié),有需要的朋友們學習下。2019-03-03python協(xié)程之yield和yield?from實例詳解
Python在并發(fā)處理上不僅提供了多進程和多線程的處理,還包括了協(xié)程,下面這篇文章主要給大家介紹了關于python協(xié)程之yield和yield?from的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-12-12