doc清楚地告诉我们,timeit命令行界面输出的效果最好。
python -m timeit '"-".join(map(str, range(100)))'
10000 loops, best of 3: 25.2 usec per loop
Python接口怎么样?
>>> import timeit
>>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"')
0.41440500499993504
它仍然是最好的吗?
答案 0 :(得分:2)
命令行将repeat
选项设置为3:
-r N, --repeat=N
重复计时器多少次(默认3次)
和“最好的”是这3个中的最好的。这与 number 参数不同,它是在未设置-n / --number
参数时自动为您确定的。
另一方面,timeit.timeit()
功能不再重复。它运行次数 number 次的语句,并给出总时间。来自timeit.timeit()
documentation:
使用给定的语句, setup 代码和 timer 函数创建一个
Timer
实例,并使用数字执行运行其timeit()
方法。
主语句的时间 number 次执行。这将执行一次setup语句,然后返回多次执行主语句所花费的时间,以秒为单位,以浮点数为单位。
如果要获得最佳结果,请使用timeit.repeat()
function:
timeit.repeat(stmt='pass', setup='pass', timer=<default timer>, repeat=3, number=1000000)
使用给定的语句,设置代码和 timer 函数创建一个
Timer
实例,并使用给定的 repeat运行其repeat() method
计数和 number 个执行。
使用timeit.repeat()
不会自动为您设置编号。为此,您必须创建自己的Timer()
实例。
文档链接到implementation,因此您可以在main()
函数中查看如何完成此操作;简化为使用默认选项时执行的代码:
t = Timer(stmt, setup, timer)
repeat = 3
for i in range(1, 10):
number = 10**i
x = t.timeit(number)
if x >= 0.2:
break
r = t.repeat(repeat, number)
best = min(r)
print "%d loops," % number,
usec = best * 1e6 / number
if usec < 1000:
print "best of %d: %.*g usec per loop" % (repeat, 3, usec)
else:
msec = usec / 1000
if msec < 1000:
print "best of %d: %.*g msec per loop" % (repeat, 3, msec)
else:
sec = msec / 1000
print "best of %d: %.*g sec per loop" % (repeat, 3, sec)
在Python 3中,通过新的Timer.autorange()
method和更好的缩放比例,上述内容得到了很大的改进。
使用您的陈述和设置进行演示:
>>> import timeit
>>> t = timeit.Timer('char in text', setup='text = "sample string"; char = "g"')
>>> repeat = 3
>>> for i in range(1, 10):
... number = 10**i
... x = t.timeit(number)
... if x >= 0.2:
... break
...
>>> r = t.repeat(repeat, number)
>>> best = min(r)
>>> print "%d loops," % number,
10000000 loops,
>>> usec = best * 1e6 / number
>>> if usec < 1000:
... print "best of %d: %.*g usec per loop" % (repeat, 3, usec)
... else:
... msec = usec / 1000
... if msec < 1000:
... print "best of %d: %.*g msec per loop" % (repeat, 3, msec)
... else:
... sec = msec / 1000
... print "best of %d: %.*g sec per loop" % (repeat, 3, sec)
...
best of 3: 0.0305 usec per loop
答案 1 :(得分:0)
从manual开始:它运行主语句number
次(默认为1000000
),
并返回执行所有 number 次所需的时间总和。
您可以将number=10**8
添加到通话中,并查看结果如何变化:
>>> import timeit
>>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"')
0.03136014938354492
>>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"', number=10**7)
0.22713899612426758
>>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"', number=10**8)
2.130625009536743
>>>