Python性能分析技巧

當(dāng)我們開始精通編程語言時(shí),我們不僅希望實(shí)現(xiàn)最終的編程目標(biāo),而且還希望可以使我們的程序更高效。在本文中,我們將學(xué)習(xí)一些Ipython的命令,這些命令可以幫助我們對Python代碼進(jìn)行時(shí)間分析。注意,在本教程中,我建議使用Anaconda。1.分析一行代碼要檢查一行python代碼的執(zhí)行時(shí)間,請使用**%timeit**。下面是一個(gè)簡單的例子來了解它的工作原理:#### magics命令%timeit的簡單用法%timeit [num for num in range(20)]
#### 輸出1.08 ?s ± 43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)主要注意事項(xiàng):在要分析的代碼行之前使用%timeit它返回代碼運(yùn)行的平均值和標(biāo)準(zhǔn)偏差。在上面的示例中,執(zhí)行了7次,每次執(zhí)行對該代碼循環(huán)100萬次(默認(rèn)行為),這需要平均1.08微秒和43納秒的標(biāo)準(zhǔn)偏差。在調(diào)用magic命令時(shí),可以自定義運(yùn)行和循環(huán)的數(shù)量,示例如下:#### 在%timeit magic命令中自定義運(yùn)行和循環(huán)數(shù)%timeit -r5 -n100 [num for num in range(20)]
1.01 ?s ± 5.75 ns per loop (mean ± std. dev. of 5 runs, 100 loops each)使用命令選項(xiàng)-r和-n,分別表示執(zhí)行次數(shù)和循環(huán)次數(shù),我們將時(shí)間配置文件操作定制為執(zhí)行5次和循環(huán)100次。2.分析多行代碼本節(jié)向前邁進(jìn)了一步,并解釋了如何分析完整的代碼塊。通過對%timeit magic命令進(jìn)行一個(gè)小的修改,將單百分比(%)替換為雙百分比(%%),就可以分析一個(gè)完整的代碼塊。以下為示例演示,供參考:#### 使用timeblock%%代碼分析%%timeit -r5 -n1000for i in range(10): n = i**2 m = i**3 o = abs(i)
#### 輸出10.5 ?s ± 226 ns per loop (mean ± std. dev. of 5 runs, 1000 loops each)可以觀察到for循環(huán)的平均執(zhí)行時(shí)間為10.5微秒。請注意,命令選項(xiàng)-r和-n分別用于控制執(zhí)行次數(shù)和循環(huán)次數(shù)。3.代碼塊中的每一行代碼進(jìn)行時(shí)間分析到目前為止,我們只在分析一行代碼或代碼塊時(shí)查看摘要統(tǒng)計(jì)信息,如果我們想評估代碼塊中每一行代碼的性能呢?使用Line_profiler 。Line_profiler 包可用于對任何函數(shù)執(zhí)行逐行分析。要使用line_profiler軟件包,請執(zhí)行以下步驟:安裝—Line_profiler 包可以通過簡單的調(diào)用pip或conda Install來安裝。如果使用的是針對Python的anaconda發(fā)行版,建議使用conda安裝#### 安裝line_profiler軟件包c(diǎn)onda install line_profiler加載擴(kuò)展—一旦安裝,你可以使用IPython來加載line_profiler:#### 加載line_profiler的Ipython擴(kuò)展%load_ext line_profiler時(shí)間分析函數(shù)—加載后,使用以下語法對任何預(yù)定義函數(shù)進(jìn)行時(shí)間分析%lprun -f function_name_only function_call_with_arguments語法細(xì)節(jié):對line_profiler的調(diào)用以關(guān)鍵字%lprun開始,后跟命令選項(xiàng)-f命令選項(xiàng)之后是函數(shù)名,然后是函數(shù)調(diào)用在本練習(xí)中,我們將定義一個(gè)接受高度(以米為單位)和重量(以磅為單位)列表的函數(shù),并將其分別轉(zhuǎn)換為厘米和千克。#### 定義函數(shù)def conversion(ht_mtrs, wt_lbs ): ht_cms = [ht*100 for ht in ht_mtrs] wt_kgs = [wt*.4535 for wt in wt_lbs]
#### 定義高度和重量列表:ht = [5,5,4,7,6]wt = [108, 120, 110, 98]
#### 使用line_profiler分析函數(shù)%lprun -f conversion conversion(ht,wt)
---------------------------------------------------------------#### 輸出Total time: 1.46e-05 s
File: <ipython-input-13-41e195af43a9>
Function: conversion at line 2
Line # Hits Time Per Hit % Time Line Contents============================================================== 2 1 105.0 105.0 71.9 ht_cms = [ht*100 for ht in ht_mtrs] 3 1 41.0 41.0 28.1 wt_kgs = [wt*.4535 for wt in wt_lbs]輸出詳細(xì)信息:以14.6微秒為單位(參考第一行輸出)生成的表有6列:第1列(行#)—代碼的行號(請注意,第#1行是故意從輸出中省略的,因?yàn)樗皇呛瘮?shù)定義語句)第2列(命中)—調(diào)用該行的次數(shù)第3列(時(shí)間)—在代碼行上花費(fèi)的時(shí)間單位數(shù)(每個(gè)時(shí)間單位為14.6微秒)第4列(每次命中平均時(shí)間)—第3列除以第2列第5列(%Time)—在所花費(fèi)的總時(shí)間中,花在特定代碼行上的時(shí)間百分比是多少第6列(內(nèi)容)—代碼行的內(nèi)容你可以清楚地看到,高度從米到厘米的轉(zhuǎn)換幾乎占了總時(shí)間的72%。結(jié)束語利用每一行代碼的執(zhí)行時(shí)間,我們可以部署策略來提高代碼的效率。希望這篇文章能給你提供幫助,你能學(xué)到一些新東西。參考鏈接:https://towardsdatascience.com/did-you-know-you-can-measure-the-execution-time-of-python-codes-14c3b422d438
☆ END ☆如果看到這里,說明你喜歡這篇文章,請轉(zhuǎn)發(fā)、點(diǎn)贊。
發(fā)表評論
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
圖片新聞
-

落地?zé)o錫!京東首個(gè)物流機(jī)器人超級工廠來了
-

OpenAI發(fā)布的AI瀏覽器,市場為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬
-

長安汽車母公司突然更名:從“中國長安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
最新活動(dòng)更多
-
即日-5.20立即下載>> 【限時(shí)免費(fèi)】物理場仿真助力生物醫(yī)學(xué)領(lǐng)域技術(shù)創(chuàng)新
-
精彩回顧立即查看>> 【直播】 智測未來·2026海克斯康春季產(chǎn)品創(chuàng)新日
-
精彩回顧立即查看>> 【線下論壇】新唐科技×芯唐南京 2026 年度研討會(huì)
-
精彩回顧立即查看>> OFweek 2026(第十五屆)中國機(jī)器人產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 維科杯· OFweek 2025中國機(jī)器人行業(yè)年度評選
-
精彩回顧立即查看>> 【在線會(huì)議】液冷服務(wù)器信號完整性及冷卻液關(guān)鍵電參數(shù)測試
推薦專題
- 1 AI狂歡遇上油價(jià)破百,全球股市還能漲多久? | 產(chǎn)聯(lián)看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實(shí)測:中文穩(wěn)、細(xì)節(jié)炸,設(shè)計(jì)師慌了
- 3 6000億美元估值錨定:字節(jié)跳動(dòng)的“去單一化”突圍與估值重構(gòu)
- 4 Tesla AI5芯片最新進(jìn)展總結(jié)
- 5 連夜測了一波DeepSeek-V4,我發(fā)現(xiàn)它可能只剩“審美”這個(gè)短板了
- 6 熱點(diǎn)丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續(xù)扣錢!
- 8 2026,人形機(jī)器人只贏了面子
- 9 DeepSeek降價(jià)90%:價(jià)格屠夫不是身份,是戰(zhàn)略
- 10 AI Infra產(chǎn)業(yè)鏈卡在哪里了?
- 高級軟件工程師 廣東省/深圳市
- 自動(dòng)化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享





