python使用裝飾器記錄方法耗時

思路

python使用修飾器記錄方法耗時,目的是每當方法執行完后,可以記錄該方法耗時,而不需要在每個方法的執行前后,去創建一個臨時變量,來記錄耗時。

方式一(不推薦):

在每個方法的執行前后,去創建一個臨時變量,來記錄耗時,代碼如下,缺點在于,如果有10個、100個方法,那不得寫10次、100次?且這樣去寫,容易寫漏,而且過于冗余

def fun():# 開始計時start_time = time.time()# 模擬耗時time.sleep(2)# 停止計時end_time = time.time()print("fun01執行嘍")

方式二(推薦):

使用裝飾器來記錄耗時,好處在于,將其標注在需要記錄的方法前,這樣的做法,相當于將這個方法,傳遞給另一個方法中。讓方法A去執行方法B(俗稱:套娃)。
這樣的好處在于,我們只需要做標注,不用去改動到需要記錄耗時的方法中的內容,這樣可以減少出錯和冗余,代碼如下:

import time
# 使用裝飾器,記錄方法執行耗時
def timer(method_name):def decorator(func):def wrapper(*args, **kwargs):# 開始計時start_time = time.time()# 執行方法result = func(*args, **kwargs)# 停止計時end_time = time.time()# 統計耗時并輸出execution_time = end_time - start_timelog = "{} 執行耗時: {:.2f} 秒".format(method_name, execution_time)print(log)return resultreturn wrapperreturn decorator# 方法1 使用裝飾器標注
@timer("fun01()")
def fun01():# 模擬耗時time.sleep(2)print("fun01執行嘍")# 方法2 不使用任何標注
def fun02():# 模擬耗時time.sleep(1)print("fun02執行嘍")# 方法3 使用裝飾器標注
@timer("fun03()")
def fun03():# 模擬耗時time.sleep(3)print("fun03執行嘍")# 順序執行fun01、02和03
fun01()
fun02()
fun03()

代碼直接執行,可以看到如下的輸出:
1.輸出fun01()“執行嘍”,卻輸出耗時是2.01秒,因為這里sleep了2秒,且使用了裝飾器。
2.輸出fun02()“執行嘍”,但未記錄執行耗時,原因是這里并未使用“裝飾器”記錄方法的耗時。
3.輸出fun03()“執行嘍”,卻輸出耗時是3.00秒,因為這里sleep了3秒,且使用了裝飾器。
在這里插入圖片描述

整理不易!

點贊!關注唄!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42492.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42492.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

source insight 添加宏-文件頭加注釋

source insight 3.5 自帶的一些宏,在安裝目錄下的 utils.em 文件中,用戶也可以自己寫文件,命令為xxx.em ,然后把這個文件添加到項目中即可,添加后在菜單欄 Options -> Key Assignments 里輸入macro 就能顯示新添加的…

第一個ArkTS項目實踐-鴻蒙ArkTS

第一個ArkTS項目實踐-ArkTS 第一個ArkTS項目實踐-ArkTS自定義組件的組成配置屬性與布局配置屬性布局 改變組件狀態循環渲染列表數據代碼ToDoItem組件ToDoList頁面 效果參考資料 第一個ArkTS項目實踐-ArkTS 本篇文章是官網上視頻對ArkTS開發實踐的第一個視頻,主要是引…

Matplotlib數據可視化(三)

目錄 1.繪圖的填充 1.1 曲線下方區域的填充 1.2 填充部分區域 1.3 兩條曲線之間的區域填充 1.4 直接使用fill進行填充 1.繪圖的填充 繪圖的填充可以調用fill_between()或fill()進行填充。 1.1 曲線下方區域的填充 x np.linspace(0,1,500) y np.sin(3*np.pi*x)*np.exp…

【C語言】每日一題(找到所有數組中消失的數字)

找到所有數組中消失的數字,鏈接奉上。 這里簡單說一下,因為還沒有接觸到動態內存,數據結構,所以知識有限,也是盡力而為,結合題庫的評論區找到了適合我的解法,以后有機會,會補上各種…

如何在HTML中使用React

突發奇想 查了查真的可以,官方文檔: 在網站中添加 React – React 開始 引入js <!-- 開發環境使用 --><script src"https://unpkg.com/react18/umd/react.development.js"></script><script src"https://unpkg.com/react-dom18/umd/reac…

穿越數字奇境:探尋元宇宙中的科技奇跡

隨著科技的迅速發展&#xff0c;元宇宙正逐漸成為一個備受關注的話題&#xff0c;它不僅是虛擬現實的延伸&#xff0c;更是將現實世界與數字世界融合的未來典范。在這個神秘而充滿活力的數字奇境中&#xff0c;涉及了眾多領域和技術&#xff0c;為我們呈現出了一個無限的創新和…

創建Azure資源鎖

鎖的介紹 在Azure中&#xff0c;資源鎖是一種用于保護訂閱、資源組或者單個資源的機制。它可以防止對受鎖定的資源進行刪除或修改操作&#xff0c;幫助確保資源的連續可用性和安全性。 Azure中的資源鎖可以分為兩種類型&#xff1a; 刪除鎖&#xff08;CanNotDelete&#xf…

elementUI遇到的問題記錄

一、 組件&#xff1a;el-table 問題&#xff1a;使用動態數據創建多級表頭后&#xff0c;刷新頁面時&#xff0c;table行會串行&#xff0c;某些列丟失&#xff0c;圖片列未顯示圖片 解決方案&#xff1a;給el-table增加key <el-table :key"${Matn.random()}${ite…

javaScript:模板字符串讓你忘記字符串拼接

目錄 一.前言 二.模板字符串的使用 1.介紹 2.模板字符串 支持換行 模板字符串更適合元素寫入 innerHTML模板字符串寫法 3.模板字符串中&#xff0c;可以運行表達式 4.模板字符串中可以運行函數 三.總結 語法&#xff1a; 多行字符串&#xff1a; 變量插值&#xff1a; …

μCOS-Ⅲ_簡介

μCOS-Ⅲ簡介 文章目錄 μCOS-Ⅲ簡介前言一、什么是 C/OS-III&#xff1f;二、C/OS-III的特點三、C/OS-III的版本和參考資料1、C/OS-III版本2、C/OS-III源碼獲取3、C/OS-III參考資料 四、C/OS-III源碼簡介總結 前言 μcos-III是一個可以基于ROM運行的、可裁剪的、搶占式、實時…

uniapp Vue 使用 sip.js進行語音通話視頻通話

下載或者安裝 sip.js 到 uniapp 項目&#xff0c;APP 端在 menifest.json 中配置麥克風權限 menifest.json 中 app 權限配置選中&#xff1a; android.permission.RECORD_AUDIO android.permission.MODIFY_AUDIO_SETTINGS sip.js 低版本 如 V0.13.0 版本的寫法 <template&…

latex 筆記:cs論文需要的排版格式

主要針對英文文獻 1 基本環境 連字符 不同長度的"-"表示不同含義。 一個"-"長度的連字符用于詞中兩個"-"長度的連字符常用于制定范圍三個"-"長度的連字符是破折號數學中的負數要用數學環境下的-得到 強調 在正式文章中, 通常不…

神經網絡基礎-神經網絡補充概念-48-rmsprop

概念## 標題 RMSProp&#xff08;Root Mean Square Propagation&#xff09;是一種優化算法&#xff0c;用于在訓練神經網絡等機器學習模型時自適應地調整學習率&#xff0c;以加速收斂并提高性能。RMSProp可以有效地處理不同特征尺度和梯度變化&#xff0c;對于處理稀疏數據和…

Open3D點云數據處理(二十):最小二乘直線擬合(三維)

文章目錄 1 最小二乘三維直線擬合原理2 代碼實現3 直線擬合的評估指標4 計算擬合的評估指標5 np.linalg.lstsq() 函數詳解專欄目錄:Open3D點云數據處理(Python) 1 最小二乘三維直線擬合原理 最小二乘三維直線擬合的原理是通過最小化數據點到直線距離的平方和,找到最優的直…

ARM64 程序調用標準

ARM64 程序調用標準 1 Machine Registers1.1 General-purpose Registers1.2 SIMD and Floating-Point Registers 2 Processes, Memory and the Stack2.1 Memory Addresses2.2 The Stack2.2.1 Universal stack constraints2.2.2 Stack constraints at a public interface 2.3 Th…

【C語言】字符串和內存函數的介紹 -- 詳解

重點介紹處理字符和字符串的庫函數的使用和注意事項。 C語言中對字符和字符串的處理很是頻繁&#xff0c;但是C語言本身是沒有字符串類型的&#xff0c;字符串通常放在常量字符串中或者字符數組中。字符串常量適用于那些對它不做修改的字符串函數。 一、求字符串長度?strlen …

python的requests庫使用

安裝 pip install requests方法 requests.get() 發起get請求調用 查詢 requests.post() 發起post請求調用 報錯 requests.put() 發起put請求調用 修改 requests.delete() 發起delete請求調用 刪除 requests.session() 獲取requests的session對象 requests.session().request(…

【Rust】Rust學習 第十四章進一步認識 Cargo 和 Crates.io

本章會討論 Cargo 其他一些更為高級的功能&#xff0c;我們將展示如何&#xff1a; 使用發布配置來自定義構建將庫發布到 crates.io使用工作空間來組織更大的項目從 crates.io 安裝二進制文件使用自定義的命令來擴展 Cargo Cargo 的功能不止本章所介紹的&#xff0c;關于其全…

云積天赫|AIGC+營銷的排頭兵

AIGC生成式人工智能&#xff0c;正逐漸成為人們關注的焦點。AIGC的出現&#xff0c;標志著人工智能已經進入了一個全新的時代。AIGC的出現&#xff0c;也為營銷行業帶來了新的活力。那么企業該怎么利用這次AIGC浪潮&#xff0c;成為AIGC營銷的排頭兵呢&#xff1f;      “…

【JavaScript】使用js實現滑塊驗證碼功能與瀏覽器打印

滑塊驗證碼 效果圖&#xff1a; 實現思路&#xff1a; 根據滑塊的最左側點跟最右側點&#xff0c; 是否在規定的距離內【頁面最左側為原點】&#xff0c;來判斷是否通過 html代碼&#xff1a; <!DOCTYPE html> <html><head><title>滑動圖片驗證碼&…