【发布时间】:2011-12-23 17:55:07
【问题描述】:
我遇到了一个我无法解释的奇怪情况。这是我生成大量元组的测试时间:
In [1]: def get_list_of_tuples():
...: return [(i,) for i in range(10**6)]
...:
In [2]: %time res = get_list_of_tuples()
CPU times: user 0.93 s, sys: 0.08 s, total: 1.01 s
Wall time: 0.98 s
In [3]: %timeit res = get_list_of_tuples()
1 loops, best of 3: 92.1 ms per loop
如您所见,生成这个庞大的元组列表只需要不到一秒钟的时间。 timeit 报告执行时间约为 0.1 秒。为什么两份报告的差异如此之大?
(在 IPython 0.11、Python 2.6.5 上测试。)
【问题讨论】:
-
如果先运行 %timeit 再运行 %time 会得到相同的结果吗?
-
有趣的评论。是的,我得到了类似的结果,但执行顺序相反。
-
我不知道 IronPython,所以我对
%time或%timeit不能多说,但我猜%time会重复计时测试10 次。 -
我使用的不是IronPython,而是IPython。 %timeit 也是多次执行命令的函数,而不是 %time。
-
%timeit 在 3 次运行中取得了最好的成绩,那么:
for i in range(3): %time res=get_list_of_tuples()得到了什么?出于这个原因,%timeit 报告较小的数字是正常的(我通常看到 ~2x),但 10x 很多。我不认为你在 Windows 上?