亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python一些性能分析的技巧

 更新時間:2020年08月30日 10:41:17   作者:Ujjwal Dalmia  
這篇文章主要介紹了python一些性能分析的技巧,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

當我們開始精通編程語言時,我們不僅希望實現(xiàn)最終目標,而且希望使我們的程序高效。

在這個教程中,我們將學(xué)習(xí)一些Ipython的命令,這些命令可以幫助我們對Python代碼進行時間分析。

注意,在本教程中,我建議使用Anaconda。

1.分析一行代碼

要檢查一行python代碼的執(zhí)行時間,請使用 %timeit 。下面是一個簡單的例子來了解它的工作原理:

#### 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)

主要注意事項:

  • 在要分析的代碼行之前使用%timeit
  • 它返回代碼運行的平均值和標準偏差。在上面的示例中,執(zhí)行了7次,每次執(zhí)行對該代碼循環(huán)100萬次(默認行為)。這需要平均1.08微秒和43納秒的標準偏差。
  • 在調(diào)用magic命令時,可以自定義運行和循環(huán)的數(shù)量。示例如下:
#### 在%timeit magic命令中自定義運行和循環(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)

使用命令選項-r和-n,分別表示執(zhí)行次數(shù)和循環(huán)次數(shù),我們將時間配置文件操作定制為執(zhí)行5次和循環(huán)100次。

2.分析多行代碼

本節(jié)向前邁進了一步,并解釋了如何分析完整的代碼塊。通過對%timeit magic命令進行一個小的修改,將單百分比(%)替換為雙百分比(%%),就可以分析一個完整的代碼塊。以下為示例演示,供參考:

#### 使用timeblock%%代碼分析
%%timeit -r5 -n1000
for 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í)行時間為10.5微秒。請注意,命令選項-r和-n分別用于控制執(zhí)行次數(shù)和循環(huán)次數(shù)。

3.代碼塊中的每一行代碼進行時間分析

到目前為止,我們只在分析一行代碼或代碼塊時查看摘要統(tǒng)計信息。如果我們想評估代碼塊中每一行代碼的性能呢?使用 Line_profiler 。

Line_profiler包可用于對任何函數(shù)執(zhí)行逐行分析。要使用line_profiler軟件包,請執(zhí)行以下步驟:

安裝— Line_profiler 包可以通過簡單的調(diào)用pip或conda Install來安裝。如果使用的是針對Python的anaconda發(fā)行版,建議使用conda安裝

#### 安裝line_profiler軟件包
conda install line_profiler

加載擴展—一旦安裝,你可以使用IPython來加載line_profiler:

#### 加載line_profiler的Ipython擴展
%load_ext line_profiler

時間分析函數(shù)—加載后,使用以下語法對任何預(yù)定義函數(shù)進行時間分析

%lprun -f function_name_only function_call_with_arguments

語法細節(jié):

  • 對line_profiler的調(diào)用以關(guān)鍵字%lprun開始,后跟命令選項-f
  • 命令選項之后是函數(shù)名,然后是函數(shù)調(diào)用

在本練習(xí)中,我們將定義一個接受高度(以米為單位)和重量(以磅為單位)列表的函數(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]

輸出詳細信息:

以14.6微秒為單位(參考第一行輸出)

生成的表有6列:

  • 第1列(行#)—代碼的行號(請注意,第#1行是故意從輸出中省略的,因為它只是函數(shù)定義語句)
  • 第2列(命中)—調(diào)用該行的次數(shù)
  • 第3列(時間)—在代碼行上花費的時間單位數(shù)(每個時間單位為14.6微秒)
  • 第4列(每次命中平均時間)—第3列除以第2列
  • 第5列(%Time)—在所花費的總時間中,花在特定代碼行上的時間百分比是多少
  • 第6列(內(nèi)容)—代碼行的內(nèi)容

你可以清楚地注意到,高度從米到厘米的轉(zhuǎn)換幾乎占了總時間的72%。

結(jié)束語

利用每一行代碼的執(zhí)行時間,我們可以部署策略來提高代碼的效率。在接下來的3個教程中,我們將分享一些最佳實踐來幫助你提高代碼的效率。

我希望這篇教程能提供幫助,你能學(xué)到一些新東西。

以上就是python一些性能分析的技巧的詳細內(nèi)容,更多關(guān)于python 性能分析的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 初始化一個定長的數(shù)組實例

    python 初始化一個定長的數(shù)組實例

    今天小編就為大家分享一篇python 初始化一個定長的數(shù)組實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • pandas中DataFrame重置索引的幾種方法

    pandas中DataFrame重置索引的幾種方法

    在pandas中,經(jīng)常對數(shù)據(jù)進行處理 而導(dǎo)致數(shù)據(jù)索引順序混亂,從而影響數(shù)據(jù)讀取、插入等,所以小編總結(jié)了幾種索引重置的方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 詳解python3 + Scrapy爬蟲學(xué)習(xí)之創(chuàng)建項目

    詳解python3 + Scrapy爬蟲學(xué)習(xí)之創(chuàng)建項目

    這篇文章主要介紹了python3 Scrapy爬蟲創(chuàng)建項目,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python 實現(xiàn)圖片裁剪小工具

    python 實現(xiàn)圖片裁剪小工具

    這篇文章主要介紹了python 實現(xiàn)圖片裁剪小工具的示例,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2021-02-02
  • TensorFlow的自動求導(dǎo)原理分析

    TensorFlow的自動求導(dǎo)原理分析

    這篇文章主要介紹了TensorFlow的自動求導(dǎo)原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python獲取list下標及其值的簡單方法

    python獲取list下標及其值的簡單方法

    下面小編就為大家?guī)硪黄猵ython獲取list下標及其值的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Python如何基于Tesseract實現(xiàn)識別文字功能

    Python如何基于Tesseract實現(xiàn)識別文字功能

    這篇文章主要介紹了Python如何基于Tesseract實現(xiàn)識別文字功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python實現(xiàn)線程池代碼分享

    Python實現(xiàn)線程池代碼分享

    這篇文章主要介紹了Python實現(xiàn)線程池代碼分享,本文直接給出實例代碼,需要的朋友可以參考下
    2015-06-06
  • 使用Python通過QQ郵箱發(fā)送電子郵件的示例代碼

    使用Python通過QQ郵箱發(fā)送電子郵件的示例代碼

    本文介紹如何使用 Python 的 smtplib 和 email 庫通過 QQ 郵箱發(fā)送電子郵件,文中有詳細的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-10-10
  • 詳解Python發(fā)送email的三種方式

    詳解Python發(fā)送email的三種方式

    這篇文章主要介紹了詳解Python發(fā)送email的三種方式,Python發(fā)送email的三種方式,分別為使用登錄郵件服務(wù)器、使用smtp服務(wù)、調(diào)用sendmail命令來發(fā)送三種方法,非常具有實用價值,需要的朋友可以參考下
    2018-10-10

最新評論