最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python一些性能分析的技巧

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

當(dāng)我們開(kāi)始精通編程語(yǔ)言時(shí),我們不僅希望實(shí)現(xiàn)最終目標(biāo),而且希望使我們的程序高效。

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

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

1.分析一行代碼

要檢查一行python代碼的執(zhí)行時(shí)間,請(qǐng)使用 %timeit 。下面是一個(gè)簡(jiǎn)單的例子來(lái)了解它的工作原理:

#### magics命令%timeit的簡(jiǎn)單用法
%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í)行對(duì)該代碼循環(huán)100萬(wàn)次(默認(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)了一步,并解釋了如何分析完整的代碼塊。通過(guò)對(duì)%timeit magic命令進(jìn)行一個(gè)小的修改,將單百分比(%)替換為雙百分比(%%),就可以分析一個(gè)完整的代碼塊。以下為示例演示,供參考:

#### 使用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í)行時(shí)間為10.5微秒。請(qǐng)注意,命令選項(xiàng)-r和-n分別用于控制執(zhí)行次數(shù)和循環(huán)次數(shù)。

3.代碼塊中的每一行代碼進(jìn)行時(shí)間分析

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

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

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

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

加載擴(kuò)展—一旦安裝,你可以使用IPython來(lái)加載line_profiler:

#### 加載line_profiler的Ipython擴(kuò)展
%load_ext line_profiler

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

%lprun -f function_name_only function_call_with_arguments

語(yǔ)法細(xì)節(jié):

  • 對(duì)line_profiler的調(diào)用以關(guān)鍵字%lprun開(kāi)始,后跟命令選項(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列(行#)—代碼的行號(hào)(請(qǐng)注意,第#1行是故意從輸出中省略的,因?yàn)樗皇呛瘮?shù)定義語(yǔ)句)
  • 第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é)束語(yǔ)

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

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

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

相關(guān)文章

  • 感知器基礎(chǔ)原理及python實(shí)現(xiàn)過(guò)程詳解

    感知器基礎(chǔ)原理及python實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了感知器基礎(chǔ)原理及python實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python提取excel一列或多列數(shù)據(jù)另存為新表代碼實(shí)例

    python提取excel一列或多列數(shù)據(jù)另存為新表代碼實(shí)例

    在日常的工作中,其實(shí)就是用鼠標(biāo)進(jìn)行數(shù)據(jù)篩選,然后選擇你想要這一行數(shù)據(jù)進(jìn)行復(fù)制,下面這篇文章主要給大家介紹了關(guān)于python提取excel一列或多列數(shù)據(jù)另存為新表的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • python 列表元素左右循環(huán)移動(dòng) 的多種解決方案

    python 列表元素左右循環(huán)移動(dòng) 的多種解決方案

    這篇文章主要介紹了python 列表元素左右循環(huán)移動(dòng) 的多種解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 手機(jī)使用python操作圖片文件(pydroid3)過(guò)程詳解

    手機(jī)使用python操作圖片文件(pydroid3)過(guò)程詳解

    這篇文章主要介紹了手機(jī)使用python操作圖片文件(pydroid3)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • pycharm安裝教程(下載安裝以及設(shè)置中文界面)

    pycharm安裝教程(下載安裝以及設(shè)置中文界面)

    這篇文章主要給大家介紹了關(guān)于pycharm安裝教程,文中包括下載安裝以及設(shè)置中文界面,PyCharm是一款Python IDE,其帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下
    2023-10-10
  • Python tkinter分隔控件(Seperator)的使用

    Python tkinter分隔控件(Seperator)的使用

    這篇文章主要介紹了Python tkinter分隔控件(Seperator)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 用Eclipse寫(xiě)python程序

    用Eclipse寫(xiě)python程序

    本篇文章給大家通過(guò)寫(xiě)第一個(gè)python程序來(lái)詳細(xì)說(shuō)明Eclipse配置以及發(fā)布過(guò)程,有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • 在CentOS6上安裝Python2.7的解決方法

    在CentOS6上安裝Python2.7的解決方法

    在CentOS6上yum安裝工具是基于Python2.6.6的,所以在CentOS6上默認(rèn)安裝的是Python2.6.6,因?yàn)橐诜?wù)器系統(tǒng)為CentOS6上部署生產(chǎn)環(huán)境,但是代碼都是基于Python2.7寫(xiě)的,所有遇到了問(wèn)題,下面通過(guò)本文給大家介紹下在CentOS6上安裝Python2.7的解決方法,一起看看吧
    2018-01-01
  • 利用python繪制動(dòng)態(tài)圣誕下雪圖

    利用python繪制動(dòng)態(tài)圣誕下雪圖

    圣誕節(jié)快到了,給你最愛(ài)的人送上一顆python動(dòng)態(tài)圣誕下雪圖吧,所以今天小編給大家介紹了如何利用python繪制動(dòng)態(tài)圣誕下雪圖,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-12-12
  • Python?tkinter實(shí)現(xiàn)計(jì)算器功能

    Python?tkinter實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Python?tkinter實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

长葛市| 楚雄市| 晋中市| 江川县| 来宾市| 瑞昌市| 玉屏| 鄯善县| 桦甸市| 大埔区| 尉氏县| 衡水市| 麟游县| 镇原县| 呼伦贝尔市| 宁化县| 乌兰察布市| 隆昌县| 黔东| 元氏县| 仪征市| 前郭尔| 和林格尔县| 中方县| 浦北县| 冕宁县| 金阳县| 安化县| 隆昌县| 鄂伦春自治旗| 科尔| 阿勒泰市| 石屏县| 沧源| 庄浪县| 尼勒克县| 华亭县| 金川县| 洞口县| 临泽县| 二连浩特市|