如何在Python函數(shù)執(zhí)行前后增加額外的行為
首先來看一個小程序,這個是計量所花費(fèi)時間的程序,以下是以往的解決示例
from functools import wraps, partial from time import time def timing(func=None, frequencies=1): if func is None: # print("+None") return partial(timing, frequencies=frequencies) # else: # print("-None") @wraps(func) def _wrapper(*args, **kwargs): start_time = time() for t in range(frequencies): result = func(*args, **kwargs) end_time = time() print('運(yùn)行花費(fèi)時間:{:.6f}s。'.format(end_time-start_time)) return result return _wrapper @timing def run(): l = [] for i in range(5000000): l.extend([i]) return len(l)
運(yùn)行如下:
In [4]: run() 運(yùn)行花費(fèi)時間:2.383398s。 Out[4]: 5000000
(喜歡刨根問底的可以去掉注釋,并思考預(yù)計會有什么樣的輸出)。
今天無意間看到了Python的上下文管理器(Context Manager
),發(fā)現(xiàn)也非常不錯,其實這跟with
語句是息息相關(guān)的,竟然以前一直未在意。
from time import time def run2(): l = [] for i in range(5000000): l.extend([i]) return len(l) class ElapsedTime(): def __enter__(self): self.start_time = time() return self def __exit__(self, exception_type, exception_value, traceback): self.end_time = time() print('運(yùn)行花費(fèi)時間:{:.6f}s。'.format(self.end_time - self.start_time)) with ElapsedTime(): run2()
總結(jié)
初略看了一點官方文檔,上下文管理還是有點多內(nèi)容的。Python發(fā)展到現(xiàn)在,其實不簡單了。說簡單,只是你自己不夠與時俱進(jìn),掌握的都是老式三板斧而已。所以,知識需要不斷更新,才能彌補(bǔ)自己的盲點,以上就是本文的全部內(nèi)容,希望能大家的學(xué)習(xí)或者工作帶來一定的幫助。
- Python使用eval函數(shù)執(zhí)行動態(tài)標(biāo)表達(dá)式過程詳解
- 解決python調(diào)用自己文件函數(shù)/執(zhí)行函數(shù)找不到包問題
- python 輪詢執(zhí)行某函數(shù)的2種方式
- Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析
- python如何實現(xiàn)異步調(diào)用函數(shù)執(zhí)行
- Python裝飾器限制函數(shù)運(yùn)行時間超時則退出執(zhí)行
- python 限制函數(shù)執(zhí)行時間,自己實現(xiàn)timeout的實例
- Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例
- python函數(shù)中return后的語句一定不會執(zhí)行嗎?
- python 執(zhí)行函數(shù)的九種方法
相關(guān)文章
對numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解
下面小編就為大家分享一篇對numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04利用PyCharm操作Github(倉庫新建、更新,代碼回滾)
這篇文章主要介紹了利用PyCharm操作Github(倉庫新建、更新,代碼回滾),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python操作SQLite數(shù)據(jù)庫的方法詳解【導(dǎo)入,創(chuàng)建,游標(biāo),增刪改查等】
這篇文章主要介紹了Python操作SQLite數(shù)據(jù)庫的方法,簡單說明了sqlite數(shù)據(jù)庫的相關(guān)概念,并結(jié)合實例形式較為詳細(xì)的分析了Python針對sqlite數(shù)據(jù)庫的導(dǎo)入,創(chuàng)建,游標(biāo),增刪改查等操作技巧,需要的朋友可以參考下2017-07-07python unix時間戳轉(zhuǎn)換毫秒的實現(xiàn)
Unix時間戳是一種常見的時間表示方式,本文主要介紹了python unix時間戳轉(zhuǎn)換毫秒的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01