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