欧美麻豆久久久久久中文_成年免费观看_男人天堂亚洲成人_中国一级片_动漫黄网站免费永久在线观看_国产精品自产av一区二区三区

中培偉業IT資訊頻道
您現在的位置:首頁 > IT資訊 > 軟件研發 > 三種提高Python代碼性能的簡便方法

三種提高Python代碼性能的簡便方法

2020-08-03 17:03:13 | 來源:中培企業IT培訓網

在互聯網編程語言盛行的今天,Python是比較流行的編程語言之一。但很多程序員對于Python代碼性能的方法并不了解。今天這里主要為大家介紹三種提高Python代碼性能的簡便方法,即是一是基準,基準,基準、二是盡可能避免循環和三使用Cython編譯Python模塊三點內容。通過這三種方法,如果您想在Jupyter筆記本電腦中利用Cython,可以使用%% Cython魔術,最終以最小的編譯函數。

  1.基準,基準,基準

基準測試聽起來像是一個繁瑣的過程,但是如果您已經將工作代碼分為多個函數,則可以像在要分析的函數中添加裝飾器一樣簡單。

首先,讓我們安裝line_profiler,以便我們可以測量函數中每行代碼所花費的時間:

pip3 install line_profiler

這提供了一個裝飾器(@profile),可用于逐行對代碼中的任何函數進行基準測試。例如,假設我們有以下代碼:

#filename: test.py@profiledef sum_of_lists(ls):

'''Calculates the sum of an input list of lists'''

s = 0

for l in ls:

for val in l:

s += val

return s

#create a list of lists

smallrange = list(range(10000))

inlist = [smallrange, smallrange, smallrange, smallrange]#now sum them

list_sum = sum_of_lists(inlist)

print(list_sum)

這將在調用sum_of_lists函數時對其進行概要分析 -請注意函數定義上方的@profile裝飾器。

現在,我們可以通過執行以下操作來分析代碼:

python3 -m line_profiler test.py

這給了我們:

第5列顯示了在每一行上花費的運行時的百分比-這將使您指向最需要優化的代碼部分,因為這是花費大部分運行時的地方。

請記住,此基準測試庫具有大量開銷,但是它非常適合在代碼中查找弱點并將其替換為更有效率的東西。

要在Jupyter筆記本中運行line_profiler,請查看%% lprun magic命令。

  2.盡可能避免循環

在許多情況下,在python中使用map,list comprehensions或numpy.vectorize(通常是最快的)之類的操作而不是循環,可以在不進行大量工作的情況下顯著提高性能,因為這些操作在內部進行了優化。讓我們通過將嵌套循環替換為map和sum來稍微修改前面的示例:

#filename: test_map.pydef sum_of_lists_map(ls):

'''Calculates the sum of an input list of lists'''

return(sum(list(map(sum,ls))))#create a list of lists

smallrange = list(range(10000))

inlist = [smallrange,smallrange,smallrange,smallrange]#now sum them

list_sum = sum_of_lists_map(inlist)

print(list_sum)

讓我們將新地圖版本定時1000次,以了解它們與原始地圖相比的效果:

地圖版本比原始版本快6倍以上!

  3.使用Cython編譯Python模塊

如果您根本不想修改項目,但仍然希望免費獲得一些性能提升,則Cython是您的朋友。

盡管Cython不是通用的python C編譯器,但是Cython允許您將python模塊編譯為共享對象文件(.so),可以由您的主要python腳本加載。

為此,您將需要在計算機上安裝Cython以及C編譯器:

pip3 install cython

如果您使用的是Debian,則可以執行以下操作下載GCC:

sudo apt install gcc

讓我們將示例代碼分成2個文件,分別名為test_cython.py和test_module.pyx:

#filename: test_module.pyxdef sum_of_lists(ls):

'''Calculates the sum of an input list of lists'''

s = 0

for l in ls:

for val in l:

s += val

return s

我們的主文件必須從test_module.pyx文件導入此功能:

#filename: test_cython.pyfrom test_module import *#create a list of lists

smallrange = list(range(10000))

inlist = [smallrange,smallrange,smallrange,smallrange]#now sum them

list_sum = sum_of_lists(inlist)

print(list_sum)

現在讓我們定義一個setup.py文件來使用Cython編譯我們的模塊:

#filename: setup.pyfrom setuptools import setupfrom Cython.Build import cythonize

setup(

ext_modules = cythonize("test_module.pyx")

)

最后,是時候編譯我們的模塊了:

python3 setup.py build_ext --inplace

現在,通過對它們進行1000次計時,可以看到該版本與原始版本相比有何改進:

在這種情況下,Cython的速度比原始速度提高了近2倍,但這取決于您要優化的代碼類型。

以上即是關于三種提高Python代碼性能的簡便方法的全部內容,想了解更多關于Python的信息,請繼續關注中培信息。

主站蜘蛛池模板: 国产aⅴ爽av久久久久久麻豆 | 高中生高潮抽搐喷出白浆视频 | 中文字幕丰满乱孑伦无码专区 | 高潮岳喷我一脸 | 日本高清动作片www 亚在线观看免费视频入口 亚洲欧洲日产国无高清码图片 | 久久亚洲国产精品成人AV秋霞 | 欧美精品成人影院 | 亚洲色欲色欲www在线丝 | 国产精品人妻无码久久网站 | 亚洲色精品aⅴ一区区三区 亚洲国产另类久久久精品黑人 | 野花香日本在线观看免费视频 | 国产精品久久久久久久曹县翰林府 | 亚洲av无码码潮喷在线观看 | 美女网站免费福利视频 | 免费1级a做爰片观看 | 曰本女人牲交全视频播放毛片 | 国产熟妇高潮叫床视频播放 | asian日本java少妇乱子另类 | 日本精品一区二区三区在线视频 | 丰满少妇被猛男猛烈进入久久 | 美女视频黄频大全免费 | 国产精品不卡av在线观看 | 四虎国产精品永久在线国在线 | 麻豆专媒体一区二区 | 初尝人妻少妇中文字幕 | 亚洲精品卡2卡3卡4卡乱码 | 亚洲欧美综合区丁香五月小说 | 邻居少妇太爽了A片在线观看动漫 | 日本阿v片在线播放免费 | 五月丁香六月婷综合缴情在线 | 久久精品一区二区免费播放 | 粉嫩av一区二区三区免费看 | 日本熟妇无码色视频在线观看 | 大量国产私密保健视频 | 欧美日韩一卡2卡三卡4卡 乱码欧美孕交 | 麻豆视频免费看了 | 欧美成人精品一区二区三区色欲 | 亚洲伊人久久大香线蕉AV | 国精品无码一区二区三区在线 | 狠狠噜天天噜日日噜无码 | 亚洲人成未满十八禁网站 |