您当前的位置:首页 > 计算机 > 编程开发 > Python

时间都去哪儿了之Python程序测试与优化

时间:09-07来源:作者:点击数:

有时候我们需要知道自己的代码运行了多久,time模块的方法提供了这个功能,但是不很准确,例如下面的代码,当循环次数小的时候得到的结果为0,显然这是不可能的。

import time

def test(v):

    """Stupid test function"""

    return sum(v)

if __name__ == '__main__': 

    starttime = time.time()

    for i in range(10000):

        test(range(100))

    endtime = time.time()

    print('Time used....')

    print(endtime-starttime)

更精确的方法是使用timeit模块中的类或方法,例如下面的代码:

import timeit 

def test(v):

    """Stupid test function"""

    return sum(v)

if __name__ == '__main__':

    print('Time used.....')

    print(timeit.timeit("test(range(100))", setup="from __main__ import test", number=10000))

 

 该模块还可以这样用:

>>> t = timeit.Timer('(str(n) for n in range(100))')

>>> t.timeit(number=100000)

0.0895908122711262

>>> t.repeat(number=100000,repeat=3)

[0.10704452514619334, 0.08236811438837321, 0.08216938445730193]

 

或者这样用:

>>> timeit.repeat('(str(n) for n in range(100))',repeat=5)

[0.8461880084669247, 0.8362863440197543, 0.821552027900907, 0.8418989873480314, 0.81309776424132] 

 

或者这样用:

 >>> timeit.timeit('[str(n) for n in range(100)]', number=1000000)

26.671083924054642

>>> timeit.timeit('(str(n) for n in range(100))', number=1000000)

0.833847470578462

>>> timeit.timeit('map(str, range(100))', number=1000000)

0.6070823118230919 

或者这样用:  

>>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"')

0.41440500499993504

>>> timeit.timeit('text.find(char)', setup='text = "sample string"; char = "g"')

1.7246671520006203

咦,我们发现了什么?实现同样的功能,不同写法的执行效率差很多哦,当然这只是一个优化的地方,以后陆续整理Python代码优化的其他原理和思路。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门