Python裝飾器簡(jiǎn)單用法實(shí)例小結(jié)
本文總結(jié)分析了Python裝飾器簡(jiǎn)單用法。分享給大家供大家參考,具體如下:
裝飾器在python中扮演著很重要的作用,例如插入日志等,裝飾器可以為添加額外的功能同時(shí)又不影響業(yè)務(wù)函數(shù)的功能。
比如,運(yùn)行業(yè)務(wù)函數(shù)fun()
同時(shí)打印運(yùn)行花費(fèi)的時(shí)間
1. 運(yùn)行業(yè)務(wù)函數(shù)fun()
同時(shí)打印運(yùn)行花費(fèi)的時(shí)間
import time def dec(fun): start = time.time() fun() end = time.time() a = end - start print a def myfun(): print 'run myfunction' dec(myfun)
運(yùn)行結(jié)果
(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00108599662781
但是每次運(yùn)行myfun都要調(diào)用dec,下面作下變動(dòng)解決這個(gè)問(wèn)題
2.
import time def dec(fun): def wrap(): start = time.time() fun() end = time.time() a = end - start print a return wrap def myfun(): print 'run myfunction' myfun=dec(myfun) myfun()
運(yùn)行結(jié)果:
(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00122618675232
這個(gè)裝飾器dec就實(shí)現(xiàn)了,并且不影響函數(shù)myfun功能
3. 裝飾器@符
import time def dec(fun): def wrap(): start = time.time() fun() end = time.time() a = end - start print a return wrap @dec def myfun(): print 'run myfunction' myfun()
結(jié)果
(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.000470876693726
使用了@后,就不用給myfun重新賦值了
@dec
就相當(dāng)于myfun=dec(myfun)
例子:
def level(leveel): def debug(func): def wrapper(*args, **kwargs): print("[DEBUG]: enter {}()".format(func.__name__),leveel) return func(*args, **kwargs) return wrapper return debug @level(leveel='debuging') def say(something): print ("hello {}!".format(something)) say(123)
輸出:
('[DEBUG]: enter say()', 'debuging')
hello 123!
''' class logging(object): def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print ("[DEBUG]: enter function {func}()".format( func=self.func.__name__)) return self.func(*args, **kwargs) @logging def say(something): print ("say {}!".format(something)) ''' class logging(object): def __init__(self, level='INFO'): self.level = level def __call__(self, func): # 接受函數(shù) def wrapper(*args, **kwargs): print ("[{level}]: enter function {func}()".format( level=self.level, func=func.__name__)) func(*args, **kwargs) return wrapper #返回函數(shù) @logging(level='INFO') def say(something): print ("say {}!".format(something)) say(123)
輸出:
[INFO]: enter function say()
say 123!
更多關(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)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
利用Python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于如何利用Python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12python通過(guò)pil將圖片轉(zhuǎn)換成黑白效果的方法
這篇文章主要介紹了python通過(guò)pil將圖片轉(zhuǎn)換成黑白效果的方法,實(shí)例分析了Python中pil庫(kù)的使用技巧,需要的朋友可以參考下2015-03-03Python使用Selenium+BeautifulSoup爬取淘寶搜索頁(yè)
這篇文章主要為大家詳細(xì)介紹了Python使用Selenium+BeautifulSoup爬取淘寶搜索頁(yè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02python 如何利用argparse解析命令行參數(shù)
這篇文章主要介紹了python 利用argparse解析命令行參數(shù)的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09python內(nèi)置模塊OS?實(shí)現(xiàn)SHELL端文件處理器
這篇文章主要介紹了python內(nèi)置模塊OS實(shí)現(xiàn)SHELL端文件處理器,文章通過(guò)圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09numpy判斷數(shù)值類型、過(guò)濾出數(shù)值型數(shù)據(jù)的方法
今天小編就為大家分享一篇numpy判斷數(shù)值類型、過(guò)濾出數(shù)值型數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06python 在右鍵菜單中加入復(fù)制目標(biāo)文件的有效存放路徑(單斜杠或者雙反斜杠)
這篇文章主要介紹了python 在右鍵菜單中加入復(fù)制目標(biāo)文件的有效存放路徑(單斜杠或者雙反斜杠),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04請(qǐng)不要重復(fù)犯我在學(xué)習(xí)Python和Linux系統(tǒng)上的錯(cuò)誤
本人已經(jīng)在運(yùn)維行業(yè)工作了將近十年,我最早接觸Linux是在大二的樣子,那時(shí)候只追求易懂,所以就選擇了Ubuntu作為學(xué)習(xí)、使用的對(duì)象,它簡(jiǎn)單、易用、好操作、界面絢麗,對(duì)于想接觸Linux的新手來(lái)說(shuō)是非常不錯(cuò)的2016-12-12