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 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不同用法的性能

代码:

#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)

测试结果:

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用法的效率比较的更多相关文章

  1. Python 执行 javascript PyExecJS 模块

    PyExecJS 安装 pip install PyExecJS PyExecJS 的基本使用: >>> import execjs >>> execjs.eval ...

  2. 转载 jenkins执行selenium 测试 浏览器不显示解决方法

    原文地址: http://blog.csdn.net/achang21/article/details/45096003 The web browser doesn't show while run ...

  3. python:利用configparser模块读写配置文件

    在自动化测试过程中,为了提高脚本的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可. 这篇博客,介绍下python中利用configpars ...

  4. python里面的xlrd模块

    ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 今天就先来说一下xlrd模块: 一.安装xlrd模块 ♦ 到python官网下载 ...

  5. python中日志logging模块的性能及多进程详解

    python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...

  6. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

  7. python里面的xlrd模块详解(一)

    那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? python操作excel主要用到xlr ...

  8. python标准日志模块logging的使用方法

    参考地址 最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下.python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果 ...

  9. Python 中 logging 日志模块在多进程环境下的使用

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 中 logging 日志模块在多进程环境下的使用 使用 Pytho ...

随机推荐

  1. 3905 - Meteor

    The famous Korean internet company nhn has provided an internet-based photo service which allows The ...

  2. Java基础知识强化101:Java 中的 String对象真的不可变吗 ?

    1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对 ...

  3. linux 文件夹权限及umask

    先创建一个目录,看看权限: $ ll 总用量 drwxrwxr-x huangxm huangxm 2月 : ./ drwxr-xr-x huangxm huangxm 2月 : ../ drwxrw ...

  4. PHP底层的运行机制与原理

    PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...

  5. ORACLE时间函数(SYSDATE)深入理解

    ORACLE时间函数(SYSDATE)深入理解 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add ...

  6. [转]网站优化-IIS7下静态文件的优化

    本文转自:http://www.cnblogs.com/Leung/archive/2009/10/26/1590256.html 在网站开发过程中,通常我们会对网站的静态文件做处事,像图片文件,CS ...

  7. 关于eclipse中删除多余的工作空间记录

    这个Eclipse是拷贝的别人的,前三个是别人在使用这个Eclipse的时候定义的路径,到我本地机器是多余的.如何删除这三个默认的工作空间路径. 这个路径的list是读取的Eclipse中的一个文件, ...

  8. codevs4373 窗口==poj2823 Sliding Window

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53676   Accepted: 15399 ...

  9. Win7 IIS (HTTP Error 500.21 - Internal Server Error)解决

    今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误: HTTP Error 500.21 - Internal Server Error Handler " ...

  10. 如何找出MySQL数据库中的低效SQL语句

    面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...