国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

Pythonwhile、for、生成器、列表推導(dǎo)等語句的執(zhí)行效率測試

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:41:10
文檔

Pythonwhile、for、生成器、列表推導(dǎo)等語句的執(zhí)行效率測試

Pythonwhile、for、生成器、列表推導(dǎo)等語句的執(zhí)行效率測試:一個功能的實(shí)現(xiàn),可以用多種語句來實(shí)現(xiàn),比如說:while語句、for語句、生成器、列表推導(dǎo)、內(nèi)置函數(shù)等實(shí)現(xiàn),然而他們的效率并不一樣。寫了一個小程序來測試它們執(zhí)行的效率。 測試內(nèi)容: 將一個數(shù)字大小為20萬的數(shù)字,依次取絕對值,放到列表中,測試重復(fù)1千次
推薦度:
導(dǎo)讀Pythonwhile、for、生成器、列表推導(dǎo)等語句的執(zhí)行效率測試:一個功能的實(shí)現(xiàn),可以用多種語句來實(shí)現(xiàn),比如說:while語句、for語句、生成器、列表推導(dǎo)、內(nèi)置函數(shù)等實(shí)現(xiàn),然而他們的效率并不一樣。寫了一個小程序來測試它們執(zhí)行的效率。 測試內(nèi)容: 將一個數(shù)字大小為20萬的數(shù)字,依次取絕對值,放到列表中,測試重復(fù)1千次

一個功能的實(shí)現(xiàn),可以用多種語句來實(shí)現(xiàn),比如說:while語句、for語句、生成器、列表推導(dǎo)、內(nèi)置函數(shù)等實(shí)現(xiàn),然而他們的效率并不一樣。寫了一個小程序來測試它們執(zhí)行的效率。

測試內(nèi)容:
將一個數(shù)字大小為20萬的數(shù)字,依次取絕對值,放到列表中,測試重復(fù)1千次.
測試程序:

代碼如下:


import time,sys
reps = 1000 #測試重復(fù)次數(shù)
nums = 200000 #測試時數(shù)字大小


def tester(func,*args): #總體測試函數(shù)
startTime = time.time()
for i in range(reps):
func(*args)
elapsed = time.time() - startTime #用time模塊來測試,結(jié)束時間與開始時間差
return elapsed

def while_Statement(): #while循環(huán)實(shí)現(xiàn)
res = []
x = 0
while nums > x:
x += 1
res.append(abs(x))

def for_Statement(): #for循環(huán)實(shí)現(xiàn)
res = []
for x in range(nums):
res.append(abs(x))

def generator_Expression():#生成器實(shí)現(xiàn)
res = list(abs(x) for x in range(nums))

def list_Comprehension(): #列表解析實(shí)現(xiàn)
res = [abs(x) for x in range(nums)]


def map_Function(): #內(nèi)置函數(shù)map實(shí)現(xiàn)
res = map(abs, range(nums))


print sys.version #打印系統(tǒng)版本
tests = [while_Statement, for_Statement, generator_Expression, list_Comprehension, map_Function]
for testfunc in tests: #將待測函數(shù)放置列表中依次遍歷
print testfunc.__name__.ljust(20),': ',tester(testfunc) #

測試結(jié)果:

代碼如下:


>>>
2.7.4 (default, Apr 6 2013, 19:55:15) [MSC v.1500 bit (AMD)]
while_Statement : 84.5769999027
for_Statement : 75.2709999084
generator_Expression : 62.3519999981
list_Comprehension : 60.4090001583
map_Function : 47.5629999638


改寫程序:

代碼如下:


import sys
nums = 100

def while_Statement():
res = []
x = 0
while nums > x:
x += 1
res.append(abs(x))

def for_Statement():
res = []
for x in range(nums):
res.append(abs(x))

def generator_Expression():
res = list(abs(x) for x in range(nums))

def list_Comprehension():
res = [abs(x) for x in range(nums)]


def map_Function():
res = map(abs, range(nums))

if __name__=='__main__':
import timeit #用timeit模塊來測試
print sys.version
funcs = [while_Statement, for_Statement, generator_Expression, list_Comprehension, map_Function]
for func in funcs:
print func.__name__.ljust(20),': ',timeit.timeit("func()", setup="from __main__ import func")

測試結(jié)果:

代碼如下:


>>>
2.7.4 (default, Apr 6 2013, 19:55:15) [MSC v.1500 bit (AMD)]
while_Statement : 37.1800067428
for_Statement : 30.3999109329
generator_Expression : 27.259781
list_Comprehension : 17.386223449
map_Function : 12.73868663


測試分析:

用time模塊,和timeit模塊兩種測試方式測試了很多組數(shù)字,得出的結(jié)果是執(zhí)行內(nèi)置函數(shù)最快,其次就是列表推導(dǎo),再其次生成器和for循環(huán),while循環(huán)最慢。一般最快的使用內(nèi)置函數(shù)的方法要比使用最慢的while快兩倍以上。簡單分析下原因:內(nèi)置函數(shù)比如說map,filter,reduce(在Python3.0中移除)基本上都是用C語言來實(shí)現(xiàn)的,所以速度是最快的,列表推導(dǎo)內(nèi)的迭代在解釋器內(nèi)是以C語言的速度運(yùn)行的(一般是for循環(huán)的兩倍,對大型文件操作而言,用列表推導(dǎo)效果尤其明顯),相比較for循環(huán)代碼是在PVM步進(jìn)運(yùn)行要快的多。但for循環(huán)里面含range(),相對速度也會快些,while語句是純粹用Python代碼寫成,所以速度最慢。所以函數(shù)式編程最好使用內(nèi)置函數(shù),然后才考慮使用列表推導(dǎo)或for循環(huán)。最好不用while循環(huán).

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Pythonwhile、for、生成器、列表推導(dǎo)等語句的執(zhí)行效率測試

Pythonwhile、for、生成器、列表推導(dǎo)等語句的執(zhí)行效率測試:一個功能的實(shí)現(xiàn),可以用多種語句來實(shí)現(xiàn),比如說:while語句、for語句、生成器、列表推導(dǎo)、內(nèi)置函數(shù)等實(shí)現(xiàn),然而他們的效率并不一樣。寫了一個小程序來測試它們執(zhí)行的效率。 測試內(nèi)容: 將一個數(shù)字大小為20萬的數(shù)字,依次取絕對值,放到列表中,測試重復(fù)1千次
推薦度:
標(biāo)簽: 生成器 語句 for
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲一区日韩 | 欧美日韩国产一区二区三区播放 | 国产图区 | 国产成人精品免费视频大全可播放的 | 成人特黄午夜性a一级毛片 成人国产一区二区三区精品 | 在线观看免费精品国产 | 日韩在线电影 | 91精品91久久久久久 | 国产69精品久久久久999 | 欧美成人精品欧美一级乱黄 | 国产精品原创视频 | 久久伊人在 | 亚洲素人在线 | 欧美精品一区二区三区在线播放 | 国产精品成人一区二区 | 国产成人精品日本亚洲语音1 | 国产一级特黄高清免费下载 | 黑人粗又大| 亚洲一级二级三级 | 欧美日韩免费看 | 亚洲 欧美 视频 | 另类激情亚洲 | 欧美另类色 | 成人一级片在线观看 | 99精品久久99久久久久 | 久久精品综合国产二区 | 欧美人禽杂交狂配 | 欧美国产精品一区二区免费 | 欧美日韩国产一区 | 久久亚洲精品中文字幕60分钟 | 亚洲午夜久久久久中文字幕 | 一本色道久久88综合亚洲精品高清 | 国产一区二区精品久久凹凸 | 亚洲欧美一区二区三区 | 图片区 日韩 欧美 亚洲 | 亚洲一区影院 | 日韩一页 | 亚洲国产成人久久一区二区三区 | 午夜免费视频 | 国产精品123区 | 91亚洲欧美综合高清在线 |