2016-04-12 72 views
-3

我使用python timeit来查看函数运行需要多长时间。python timeit是否考虑设置计数

 
    setup = '''from __main__ import my_func 
    import random 
    l = list(range(10000)) 
    random.shuffle(l)''' 
    timeit.timeit('my_func(l)', setup=setup, number=1000) 

我得到的结果比使用日期时间的“正常”检查要大。 timeit是否也会计算设置所需的时间,如果是这样 - 我如何禁用它?

+0

请包括您的设置与日期时间和两者的结果。 – MSeifert

+1

向我们展示结果。他们是1000倍大吗? Timeit返回[number = 1000'执行所花费的时间](https://docs.python.org/3/library/timeit.html#timeit.Timer.timeit)。不,不包括安装阶段。 –

回答

0

请问my_func(l)变异l?这可能会影响时间。

timeit将运行一次安装程序,并在每次调用要定时的代码时重新使用由安装程序创建的对象。此外,它可以调用代码几次来大致估计它的运行速度,并在实际的定时运行之前选择迭代的次数(尽管不是当你自己指定了运行次数时)。这意味着如果初始快速运行,它将不会包含在定时结果中。

例如,如果my_func()是一个写得很糟糕的快速排序功能,它可能在您在混洗列表中调用时运行速度很快,而当您使用(现在已排序)列表再次调用它时会非常缓慢地运行。 timeit只会测量非常慢的通话。

+0

非常感谢你! :)它确实改变了列表,我没有意识到该设置只运行一次,这确实会影响我的结果 – Lian

0

docs说:

安装程序的执行时间是从整体的定时 执行运行排除。

0

Python的2.0 docs是很清楚,建立语句不定时:

主要发言时间的执行次数。这会执行一次设置 语句,然后返回多次执行主要语句(以秒为单位)作为浮点数所花费的时间。

但是,如果您不确定,请在安装语句中放入一个大而缓慢的过程,然后进行测试,看看它有什么不同。