如何在Python函數(shù)執(zhí)行前后增加額外的行為
首先來(lái)看一個(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
(喜歡刨根問(wèn)底的可以去掉注釋,并思考預(yù)計(jì)會(huì)有什么樣的輸出)。
今天無(wú)意間看到了Python的上下文管理器(Context Manager),發(fā)現(xiàn)也非常不錯(cuò),其實(shí)這跟with語(yǔ)句是息息相關(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í)不簡(jiǎn)單了。說(shuō)簡(jiǎn)單,只是你自己不夠與時(shí)俱進(jìn),掌握的都是老式三板斧而已。所以,知識(shí)需要不斷更新,才能彌補(bǔ)自己的盲點(diǎn),以上就是本文的全部?jī)?nèi)容,希望能大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助。
- Python使用eval函數(shù)執(zhí)行動(dòng)態(tài)標(biāo)表達(dá)式過(guò)程詳解
- 解決python調(diào)用自己文件函數(shù)/執(zhí)行函數(shù)找不到包問(wèn)題
- python 輪詢執(zhí)行某函數(shù)的2種方式
- Python利用PyExecJS庫(kù)執(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后的語(yǔ)句一定不會(huì)執(zhí)行嗎?
- python 執(zhí)行函數(shù)的九種方法
相關(guān)文章
matplotlib基礎(chǔ)繪圖命令之bar的使用方法
這篇文章主要介紹了matplotlib基礎(chǔ)繪圖命令之bar的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
python os模塊在系統(tǒng)管理中的應(yīng)用
這篇文章主要介紹了python os模塊在系統(tǒng)管理中的應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
基于pytorch 預(yù)訓(xùn)練的詞向量用法詳解
今天小編就為大家分享一篇基于pytorch 預(yù)訓(xùn)練的詞向量用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python添加進(jìn)度條tqdm進(jìn)階使用實(shí)例
這篇文章主要為大家介紹了Python添加進(jìn)度條tqdm進(jìn)階使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Python使用Dijkstra算法實(shí)現(xiàn)求解圖中最短路徑距離問(wèn)題詳解
這篇文章主要介紹了Python使用Dijkstra算法實(shí)現(xiàn)求解圖中最短路徑距離問(wèn)題,簡(jiǎn)單描述了Dijkstra算法的原理并結(jié)合具體實(shí)例形式分析了Python使用Dijkstra算法實(shí)現(xiàn)求解圖中最短路徑距離的相關(guān)步驟與操作技巧,需要的朋友可以參考下2018-05-05

