如何在Python函數(shù)執(zhí)行前后增加額外的行為
首先來看一個小程序,這個是計量所花費時間的程序,以下是以往的解決示例
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('運行花費時間:{:.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)
運行如下:
In [4]: run() 運行花費時間: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('運行花費時間:{:.6f}s。'.format(self.end_time - self.start_time))
with ElapsedTime():
run2()
總結(jié)
初略看了一點官方文檔,上下文管理還是有點多內(nèi)容的。Python發(fā)展到現(xiàn)在,其實不簡單了。說簡單,只是你自己不夠與時俱進,掌握的都是老式三板斧而已。所以,知識需要不斷更新,才能彌補自己的盲點,以上就是本文的全部內(nèi)容,希望能大家的學(xué)習(xí)或者工作帶來一定的幫助。
- Python使用eval函數(shù)執(zhí)行動態(tài)標表達式過程詳解
- 解決python調(diào)用自己文件函數(shù)/執(zhí)行函數(shù)找不到包問題
- python 輪詢執(zhí)行某函數(shù)的2種方式
- Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析
- python如何實現(xiàn)異步調(diào)用函數(shù)執(zhí)行
- Python裝飾器限制函數(shù)運行時間超時則退出執(zhí)行
- python 限制函數(shù)執(zhí)行時間,自己實現(xiàn)timeout的實例
- Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例
- python函數(shù)中return后的語句一定不會執(zhí)行嗎?
- python 執(zhí)行函數(shù)的九種方法
相關(guān)文章
matplotlib基礎(chǔ)繪圖命令之bar的使用方法
這篇文章主要介紹了matplotlib基礎(chǔ)繪圖命令之bar的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
python os模塊在系統(tǒng)管理中的應(yīng)用
這篇文章主要介紹了python os模塊在系統(tǒng)管理中的應(yīng)用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06
基于pytorch 預(yù)訓(xùn)練的詞向量用法詳解
今天小編就為大家分享一篇基于pytorch 預(yù)訓(xùn)練的詞向量用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python使用Dijkstra算法實現(xiàn)求解圖中最短路徑距離問題詳解
這篇文章主要介紹了Python使用Dijkstra算法實現(xiàn)求解圖中最短路徑距離問題,簡單描述了Dijkstra算法的原理并結(jié)合具體實例形式分析了Python使用Dijkstra算法實現(xiàn)求解圖中最短路徑距離的相關(guān)步驟與操作技巧,需要的朋友可以參考下2018-05-05

