博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较
阅读量:6833 次
发布时间:2019-06-26

本文共 2849 字,大约阅读时间需要 9 分钟。

timeit模块用于测试一段代码的执行效率

1.Timer类

Timer 类:

__init__(stmt="pass", setup="pass", timer=default_timer)

stmt 是执行语句,setup 是导入执行语句环境

print_exc(file=None)timeit(number=default_number)

返回测试所用秒数,number 是每个测试中调用被计时语句的次数

repeat(repeat=default_repeat, number=default_number)

返回测试所用秒数列表,repeat 是重复整个测试的次数,number 是每个测试中执行语句的次数

快捷执行的方法:

timeit.timeit('time.time()','import time',number=10)  #这里会执行两次测试,每次测试都执行time.time()语句10次timeit.repeat('time.time()','import time',repeat=2,number=10)

DEMO

import timeitdef f1():    for i in range(1000):        passdef f2():    for i in xrange(1000):        passt=timeit.Timer('f1()','from __main__ import f1')t1=timeit.Timer('f2()','from __main__ import f2')print t.timeit()print t1.timeit()

查看一个脚本的执行效率

python -m cProfile test_cprofile.py

2.测试Python不同用法的性能

代码:

#copy与deepcopy测试print 'test copy and deepcopy'import copyx=range(1000)print 'copy',timeit.timeit('copy.copy(x)','from __main__ import copy,x',number=100)print 'deepcopy',timeit.timeit('copy.deepcopy(x)','from __main__ import copy,x',number=100)#json和eval测试import jsonimport astprint 'test json and eval'd=dict([(i,i) for i in xrange(1000)])def test_json():    json.loads(json.dumps(d))def test_ast():    ast.literal_eval(str(d))print 'json',timeit.timeit('test_json()','from __main__ import test_json',number=100)print 'ast',timeit.timeit('test_ast()','from __main__ import test_ast',number=100)#while 1 和while True测试print 'test while 1 and while True'def while_one():    i=1000    while 1:        i-=1        if i<1:            breakdef while_true():    i=1000    while True:        i-=1        if i<1:            breakprint 'while 1',timeit.timeit('while_one()','from __main__ import while_one',number=1000)print 'while true',timeit.timeit('while_true()','from __main__ import while_true',number=1000)#测试map和列表解析print 'map',timeit.timeit('map(lambda x:x+10,xrange(10000))',number=1000)print 'list parse',timeit.timeit('[x+10 for x in xrange(10000)]',number=1000)#测试filter和列表解析print 'filter',timeit.timeit('filter(lambda x:x<5000,xrange(10000))',number=1000)print 'list parse',timeit.timeit('[x for x in xrange(10000) if x<5000]',number=1000)#测试zip和列表解析d=[(i,i+1,i+2) for i in xrange(10000)]print 'zip',timeit.timeit('zip(*d)[0]','from __main__ import d',number=1000)print 'list parse',timeit.timeit('[x[0] for x in d]','from __main__ import d',number=1000)

测试结果:

test copy and deepcopy copy 0.000615931092709deepcopy 0.215742113851test json and evaljson 0.0845840788228ast 0.603505149528test while 1 and while Truewhile 1 0.0920688664622while true 0.107391902198map 1.89678050601list parse 0.741696814336filter 1.42262613537list parse 0.631220298896zip 1.26682006617list parse 0.993506476463

结论

  1. copy比deepcopy快
  2. json比ast快
  3. while 1比while True快
  4. 列表解析比map,filter,zip快
    5
    r1=[string[i:i+width] for i in xrange(0,len(string),width)]
    r2=re.findall(r".{%s}"%width,string)
    r1比r2快

转载地址:http://intkl.baihongyu.com/

你可能感兴趣的文章
jsp各部分编码的含义
查看>>
知方可补不足~Sqlserver中的几把锁和.net中的事务级别 回到目录
查看>>
【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
查看>>
通过广播来监听屏幕点亮和关闭状态
查看>>
Cocos2dx引擎10-事件派发
查看>>
基于jQuery的宽屏可左右切换的焦点图插件
查看>>
IT技术需求建立时需考虑的因素
查看>>
猛醒:也许我们一生追求的都错了!
查看>>
IDDD 实现领域驱动设计-理解领域和子域
查看>>
GitHub基本操作
查看>>
微信开发(01)之如何成为开发者
查看>>
Redis 中的事务
查看>>
canvas使用3
查看>>
怎么创建MongoDB数据库
查看>>
Quart2D图形上下文
查看>>
html5 canvas旋转+缩放
查看>>
QtGui.QSplitter
查看>>
前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯...
查看>>
ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
查看>>
MVC4 WebApi开发中如果想支持Session请做好如下几个方面的问题
查看>>