我是靠谱客的博主 开放小蝴蝶,这篇文章主要介绍Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较,现在分享给大家,希望可以做个参考。

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

1.Timer类

Timer 类:

复制代码
1
__init__(stmt="pass", setup="pass", timer=default_timer)

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

复制代码
1
2
3
print_exc(file=None) timeit(number=default_number)

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

复制代码
1
2
repeat(repeat=default_repeat, number=default_number)

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

复制代码
1
2
3
4
timeit.timeit('time.time()','import time',number=10) #这里会执行两次测试,每次测试都执行time.time()语句10次 timeit.repeat('time.time()','import time',repeat=2,number=10)

DEMO

复制代码
1
2
3
4
5
6
7
8
9
10
11
import timeit def f1(): for i in range(1000): pass def f2(): for i in xrange(1000): pass t=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不同用法的性能

代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#copy与deepcopy测试 print 'test copy and deepcopy' import copy x=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 json import ast print '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: break def while_true(): i=1000 while True: i-=1 if i<1: break print '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)

测试结果:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
test copy and deepcopy copy 0.000615931092709 deepcopy 0.215742113851 test json and eval json 0.0845840788228 ast 0.603505149528 test while 1 and while True while 1 0.0920688664622 while true 0.107391902198 map 1.89678050601 list parse 0.741696814336 filter 1.42262613537 list parse 0.631220298896 zip 1.26682006617 list 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快

参考博客

最后

以上就是开放小蝴蝶最近收集整理的关于Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较的全部内容,更多相关Python执行效率测试模块timei内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部