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

2016-09-09 董付国 Python小屋 Python小屋

有时候我们需要知道自己的代码运行了多久,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代码优化的其他原理和思路。



温馨提示:单击文章顶部作者名字旁边浅蓝色的“Python小屋”进入公众号,关注后可以查看更多内容!


欢迎转发给您的朋友,或许这正是Ta需要的知识!