亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > Python自定義計(jì)時(shí)函數(shù)

Python自定義計(jì)時(shí)函數(shù)

來源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-11-07 20:20:47 1699359647

python標(biāo)準(zhǔn)庫提供的cProfile/profile模塊,計(jì)時(shí)輸出信息較多。本節(jié)將介紹其他幾種精度略低但簡單易用的計(jì)時(shí)工具。根據(jù)代碼粒度不同,將其分為三類。

1.1整個(gè)程序計(jì)時(shí)

Unix/Linux系統(tǒng)中,可用time命令簡單地統(tǒng)計(jì)整個(gè)程序的耗時(shí)。例如:

[wangxiaoyuan_@localhostPyTest]$timepythonBCLineCounter.pybulk

FileLinesCodeLinesCommentLinesEmptyLinesCommentPercent

1545010437326425380.24

real0m2.803s

user0m1.124s

sys0m0.052s

統(tǒng)計(jì)值real表示程序運(yùn)行的實(shí)際耗時(shí),user表示程序執(zhí)行用戶態(tài)代碼(內(nèi)核外)耗費(fèi)的CPU時(shí)間,sys表示程序在內(nèi)核態(tài)運(yùn)行所耗費(fèi)的CPU時(shí)間(即調(diào)用特定內(nèi)核函數(shù)的耗時(shí))。若user和sys時(shí)間之和小于real時(shí)間,表明程序?yàn)镮/O密集型(I/Obound),即程序的性能問題很可能與等待I/O有關(guān)。

time命令的詳細(xì)描述參見《Linux用戶態(tài)程序計(jì)時(shí)方式詳解》。

1.2代碼片段計(jì)時(shí)

代碼片段計(jì)時(shí)分為函數(shù)計(jì)時(shí)和語句塊計(jì)時(shí)。這兩種計(jì)時(shí)均可使用Python標(biāo)準(zhǔn)庫timeit模塊,該模塊的詳細(xì)介紹參見官方幫助。

本小節(jié)將使用timeit模塊的timeit()方法,即timeit(stmt='pass',setup='pass',timer=,number=1000000)。其中,參數(shù)stmt為待計(jì)時(shí)的目標(biāo)代碼;setup為執(zhí)行代碼的準(zhǔn)備工作(通常是import之類的語句),不計(jì)入時(shí)間;timer在Windows系統(tǒng)中為time.clock(),Linux系統(tǒng)中則為time.time(),取默認(rèn)值即可;number指示stmt重復(fù)執(zhí)行的次數(shù)。該方法返回執(zhí)行stmt代碼number遍所用的時(shí)間,單位為秒,float類型。

除timeit()方法外,對于特定函數(shù)的計(jì)時(shí),可使用裝飾器(decorator);對于語句塊計(jì)時(shí),則可使用上下文管理器(contextmanager)。

以裝飾器為例:

importfunctools,sys,time

defFuncTimer(repeats=10000):

defdecorator(func):

@functools.wraps(func)

defwrapper(*args,**kwargs):

#Windows系統(tǒng)中clock()粒度為毫秒,time()粒度為1/60秒;

#Unix系統(tǒng)中clock()粒度為1/100秒,time()精度較其更高。

ifsys.platform=="win32":

timerFunc=time.clock

else:

timerFunc=time.time

try:

startTime=timerFunc()

foriinrange(repeats):

ret=func(*args,**kwargs)

finally:#當(dāng)目標(biāo)函數(shù)發(fā)生異常時(shí),仍舊輸出計(jì)時(shí)信息

endTime=timerFunc()

print'%s.%s()=>'%(func.__module__,func.__name__),

print'TimeElasped:%.3fmsec,repeated%dtime(s).'\

%(((endTime-startTime)*1000.0),repeats)

returnret

returnwrapper

returndecorator

運(yùn)行如下代碼,對比自定義裝飾器FuncTimer與timeit模塊計(jì)時(shí)效果:

@FuncTimer(10)

defDecoratedFunc():

L=[]

foriinrange(100):L.append(i)

defRawFunc():

L=[]

foriinrange(100):L.append(i)

DecoratedFunc()

importtimeit;print'%.6fsec'%timeit.timeit(stmt=RawFunc,number=10)

輸出如下:

__main__.DecoratedFunc()=>TimeElasped:0.164msec,repeated10time(s).

0.000174sec

可見,計(jì)時(shí)效果非常接近。

注意,F(xiàn)uncTimer裝飾器內(nèi)根據(jù)系統(tǒng)選用不同的計(jì)時(shí)器,這是考慮到time.clock()的精度因系統(tǒng)平臺(tái)而異。在Unix/Linux系統(tǒng)中,該方法返回當(dāng)前所耗的CPU時(shí)間;而在Windows系統(tǒng)中,該方法基于Win32函數(shù)QueryPerformanceCounter(),返回從首次調(diào)用待計(jì)時(shí)函數(shù)起所經(jīng)歷的掛鐘時(shí)間(wallclocktime),精度較time.time()更高。相比而言,timeit方法中使用的缺省計(jì)時(shí)器總是測量掛鐘時(shí)間,這也意味著關(guān)于某函數(shù)的計(jì)時(shí)可能會(huì)受到同一計(jì)算機(jī)上運(yùn)行的其他進(jìn)程的影響。

time.clock()計(jì)時(shí)器的平臺(tái)差異性參考以下示例(假定所在腳本名為Timing.py):

@FuncTimer(5)

defSqrtTiming(loops):

importmath

try:

frommathimportfsum#Python2.6+

returnfsum([math.sqrt(x)forxinrange(loops)])

exceptImportError:#Python2.5-

returnsum([math.sqrt(x)forxinrange(loops)])

@FuncTimer(1)

defSleepTiming():

time.sleep(2)

file=open(r'out.txt',"w+")

foriinrange(10000):

file.write('helloworld!')

SqrtTiming(100000)

SleepTiming()

在Windows系統(tǒng)控制臺(tái)和IDLEShell里的運(yùn)行結(jié)果如下:

E:\PyTest>Timing.py

SqrtTiming()=>TimeElasped:150.124msec,repeated5time(s).

SleepTiming()=>TimeElasped:2155.140msec,repeated1time(s).

__main__.SqrtTiming()=>TimeElasped:151.809msec,repeated5time(s).

__main__.SleepTiming()=>TimeElasped:2185.594msec,repeated1time(s).

>>>importTiming

Timing.SqrtTiming()=>TimeElasped:148.892msec,repeated5time(s).

Timing.SleepTiming()=>TimeElasped:2223.157msec,repeated1time(s).

在Linux系統(tǒng)中運(yùn)行結(jié)果與之類似。若將timerFunc改為time.clock(),則計(jì)時(shí)輸出為:

[wangxiaoyuan_@localhost~]$timepythonTiming.py

__main__.SqrtTiming()=>TimeElasped:320.000msec,repeated5time(s).

__main__.SleepTiming()=>TimeElasped:330.000msec,repeated1time(s).

real0m2.381s

user0m0.332s

sys0m0.019s

可見,time.sleep(2)并未計(jì)入SleepTiming()耗時(shí),導(dǎo)致計(jì)時(shí)結(jié)果與real時(shí)間相差很大。

對于代碼片段計(jì)時(shí),以上下文管理器為例:

importcontextlib,sys,time

@contextlib.contextmanager

defBlockTimer(label='Block'):

ifsys.platform=="win32":timerFunc=time.clock

else:timerFunc=time.time

startTime=timerFunc()

try:

yield

finally:

endTime=timerFunc()

print'%s=>'%label,

print'TimeElasped:%.3fmsec.'\

%((endTime-startTime)*1000.0)

基于BlockTimer測量代碼片段的示例如下:

withBlockTimer('cPickle'):

fromcPickleimportdumps,loads

s=dumps([x*2.4forxinrange(100000)])

loads(s)

withBlockTimer('json'):

fromjsonimportdumps,loads

s=dumps([x*2.4forxinrange(100000)])

loads(s)

運(yùn)行結(jié)果如下:

cPickle=>TimeElasped:237.569msec.

json=>TimeElasped:181.714msec.

可見,對于浮點(diǎn)型對象,json模塊執(zhí)行速度比cPickle模塊更快。

當(dāng)然,借助timeit模塊也可對代碼片段計(jì)時(shí)。例如:

fromtimeitimporttimeit

sep='fromcPickleimportdumps,loads'

stp='s=dumps([x*2forxinrange(100000)]);loads(s)'

print'cPickle:%.6fsec'%timeit(stmt=stp,setup=sep,number=1)

sej='fromjsonimportdumps,loads'

stj='s=dumps([x*2forxinrange(100000)]);loads(s)'

print'json:%.6fsec'%timeit(stmt=stj,setup=sej,number=1)

本例改為整型對象,且模塊導(dǎo)入語句不計(jì)入總耗時(shí)。運(yùn)行結(jié)果如下:

cPickle:0.100775sec

json:0.064752sec

可見,對于整型對象,json模塊執(zhí)行速度也比cPickle模塊快。

以上內(nèi)容為大家介紹了Python自定義計(jì)時(shí)函數(shù),希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.rencairushan.com/


聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
Python 面向?qū)ο蟮能浖_發(fā)

很多人在學(xué)完了python的class機(jī)制之后,遇到一個(gè)生產(chǎn)中的問題,還是會(huì)懵逼,這其實(shí)太正常了,因?yàn)槿魏纬绦虻拈_發(fā)都是先設(shè)計(jì)后編程,python的cla...詳情>>

2023-11-07 23:20:48
Python 決策樹算法思想

決策樹(decisiontree)是一個(gè)樹結(jié)構(gòu)(可以是二叉樹或者非二叉樹)。決策樹分為分類樹和回歸樹兩種,分類樹對離散變量做決策樹,回歸樹對連續(xù)變量做...詳情>>

2023-11-07 23:10:00
Python C4.5算法

ID3算法的作者昆蘭基于上面的不足,對ID3算法做了改進(jìn),這就是C4.5算法,也許你會(huì)問,為什么不叫ID4,ID5之類的名字呢?那是因?yàn)闆Q策樹當(dāng)時(shí)太火...詳情>>

2023-11-07 23:02:48
Python 面向過程

python面向過程優(yōu)點(diǎn):復(fù)雜的問題流程化,進(jìn)而簡單化(一個(gè)復(fù)雜的問題,分成一個(gè)個(gè)小的步驟去實(shí)現(xiàn),實(shí)現(xiàn)小的步驟將會(huì)非常簡單)舉個(gè)典型的面向過程...詳情>>

2023-11-07 22:55:36
Python編程規(guī)范的重要性

首先談一下注釋:注釋不止是為了自己以后看的更清楚,還是為了以后的開發(fā)人員所準(zhǔn)備的,其實(shí)一段時(shí)間后,當(dāng)需要對程序做一些修改或者是改正某個(gè)...詳情>>

2023-11-07 22:37:35
天天澡夜夜澡人人澡| 国产亚洲精久久久久久无码77777| 老熟女重囗味HDXX70星空| 国产又黄又硬又粗| 精品国产Ⅴ无码大片在线观看| 久久高清内射无套| 蜜乳一区在线视频| 免费播放片高清在线视频| 人妻丰满AV无码中文字幕| 双腿吊起揉捏花蒂| 亚洲国产精品成人久久久| 中文日产无乱码AV在线观| 波多野结衣守望人妻理论| 国产肉体XXXX裸体784大胆| 久久国产精品香蕉成人APP| 内射毛片内射国产夫妻| 少妇高潮一区二区三区99| 亚洲AⅤ永久无码中文字幕| 伊人久久大香线蕉AV不变影院| MD豆传媒一二三区进站口在线看| 国产成人AV一区二区三区不卡| 韩国19禁床震无遮掩免费| 蜜桃Av噜噜一区二区三区绯色 | 日日麻批免费40分钟无码| 无遮挡又黄又刺激又爽的视频| 亚洲AV永久无码精品一区| 16岁MACBOOKPRO日本| 国产办公室秘书无码精品99| 精品香蕉99久久久久成人网站| 两根大肉大捧一进一出好爽视频 | 亚洲中文字幕日产乱码小说| YW.1CNC爆乳尤物未| 父债子偿BY画崖海棠| 精品国产污污免费网站AⅤ| 欧美日韩精品人妻二区| 性──交──性──乱| 亚洲已满18点击进入在线看片| ZOOMSERVO兽狗产品优势| 国产精品一区二区香蕉| 巨爆乳中文字幕巨爆区巨爆乳无码| 日本丰满妇人成熟免费中文字幕 | 哦┅┅快┅┅用力啊┅警花少妇 | 一本加勒比HEZYO无码资源网| 差差差软件大全APP推荐免费 | 无码免费无线观看在线视| 一級黃色毛片免費看| Z0ZOZ0另类Z0ZO| 好男人WWW在线影院官网| 欧亚成年男女深夜百度网盘| 亚洲AV永久无码精品九九| 最新AV片免费网站入口| 国产裸模视频免费区无码 | 国产乱人伦无无码视频试看| 内谢XXXXX8老| 亚洲AV无码专区在线观看亚| XXXX性BBBB欧美| 精品国产一区二区三区AV 性色| 人妻无码ΑV中文字幕久久| 亚洲国产精品无码久久青草| 锕锕锕锕锕锕锕好大污下载| 极品婬荡少妇XXXX欧美| 尿眼PEEHOLE重口| 亚洲国产成人久久综合| A级黑粗大硬长爽猛出猛进| 国产V综合V亚洲欧美久久| 美女高潮无遮挡免费视频| 无码专区狠狠躁躁天天躁| 啊灬啊灬啊灬快灬高潮少| 久久综合激激的五月天| 亚洲AV福利天堂一区二区三| 纯肉无遮挡H肉动漫在线观看3D| 美美哒免费高清影院| 亚洲精品成人A在线观看| 国产成人剧情AV麻豆果冻| 欧美性XXXX极品少妇| 一区二区三区国产精品保安 | 扒开双腿疯狂进出爽爽爽视频| 久久久久亚洲AV无码专区首JN| 无码中文字幕AV久久专区| 成人精品一卡2卡3卡4卡新区乱| 麻豆人妻少妇精品无码专区2 | 回民丰满少妇XXX性| 特大巨黑吊XXXX高潮| 办公室屈辱的人妻加班| 妺妺窝人体色www聚色窝图| 亚洲熟女乱色一区二区三区| 国产在线码观看超清无码视频| 少妇精品久久久一区二区三区 | 国产精品美女乱子伦高| 日韩一区二区三区人妻系列| H无码动漫在线观看网站| 美女高潮无遮挡喷水视频| 亚洲国产精品无码AV| 国产毛片毛多水多的特级毛片| 色综合99久久久无码国产精品| JLZZ大全高潮多水| 女人高潮抽搐喷液30分钟视频| 一本之道AV不卡精品| 精品无码AV一区二区三区不卡| 亚洲AV日韩精品一区二区三区| 国产成人无码区免费内射一片色欲| 日本丰满熟妇乱XXXXX故事| BT天堂网.WWW在线资源| 拧花蒂尿用力按凸起喷水尿AV| 荫蒂添的好舒服小说短篇| 久久精品日日躁夜夜躁| 亚洲老熟女 @ TUBEUM TV| 和丰满少妇作爱过程视频| 亚洲AV日韩AV无码大全| 国产又黄又大又粗的视频| 亚A∨国AV综AV涩涩涩| 国产乱子伦一区二区三区=| 偷拍中国熟妇牲交| 国产精品久久久久久久久KTV| 熟妇人妻一区二区三区四区| 干了快生了的孕妇| 日韩视频中文字幕精品偷拍| 成熟交BGMBGMBGM日本| 日韩精品一区二区亚洲蜜桃| 从今天开始当城主| 少妇人妻偷人精品无码视频新浪| 大屁股大乳丰满人妻| 上课我穿超短裙被同桌摸出水| 出租屋勾搭老熟妇啪啪| 色婷婷综合久久久久中文| 国产99久久久国产精品成人小说 | 亚洲人成网站18禁止大| 精品人妻Av乱码一区二区| 亚洲无人区码卡二卡三卡四卡 | 国产精品无码AV无码| 亚洲A∨精品一区二区三区下载 | 免费精品99久久国产综合精品 | 丰满少妇被猛烈进出69影院| 双飞两个丰满少妇11P| 国产精品香蕉在线观看网| 亚洲AV无码一区二区三区在线播 | 欧美成本人网站免费观看| XXXXFREE少妇过瘾| 色噜噜狠狠狠综合曰曰曰| 国产精品久久久久精品三级APP| 无码人妻精品中文字幕| 果冻传媒一二三工厂免费观看| 亚洲精品99久久久久中文字幕 | 亚洲中文字幕无码一区二区三区| 局长趴在雪白的身上耸动| 97在线无码免费人妻短视频| 强开小婷嫩苞又嫩又紧视频韩国| 成年轻人电影WWW无码| 无码不卡AV东京热毛片| 国内精品国内精品自线在拍| 亚洲熟妇一区二区| 内射老妇BBWX0C0CK| 成人免费A级毛片久久| 无码日韩人妻精品久久蜜桃| 极品无码AV国模在线观看| 雨后小故事完整版| 秋霞国产午夜伦午夜无码灬 | 精品久久久久久久无码人妻热| 一区二区伊人久久大杳蕉| 欧美人与动牲猛交XXXXBBB| 纯肉无遮挡H肉动漫在线观看网址 纯肉无遮挡H肉动漫在线观看国产 | 2022最新韩国理伦片在线观看| 人人添人人澡人人澡人人人人| 国产CHINESE中国HDXX| 亚洲AV日韩AV永久无码免下载| 久久人人爽天天玩人人妻精品 | 国产精品99精品无码视亚| 亚洲国产精品无码一线岛国| 免费无码又爽又刺激激情视频| 波多野结衣AV电影在线观看| 无码专区狠狠躁天天躁| 久久五月精品中文字幕| 草草永久地址发布页①| 亚洲AV成人无码精品网站按 | 夜夜添无码试看一区二区三区| 欧美军警GAY巨大粗长| 国产放荡对白视频在线观看| 亚洲日韩精品欧美一区二区| 奇米四色7777中文字幕| 国产精品白浆无码流出| 一本久道视频无线视频| 人妻AV中文字幕一区二区三区| 国产乱码精品一品二品| 欲色欲色天天天WWW| 色欲av蜜臀一区二区三区多少| 精品久久久久久天美传媒 | 国产美女久久精品香蕉69| 又大又黄又粗又爽的免费视频| 日本丰满岳乱妇在线观看| 国内精品乱码卡一卡2卡麻豆| 最新国产毛2卡3卡4卡| 我和岳交换夫妇爽| 毛片TV网站无套内射TV网站| 高清精品一区二区三区| 艳妇臀荡乳欲伦69调教视频| 日韩A人毛片精品无人区乱码 | 人妻免费一区二区三区最新| 狠狠色丁香久久婷婷综合| GRANSREMEDY老太太| 亚洲A∨国产AV综合AV下载|