Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python timeit.timeit的返回值是平均值还是最佳值?_Python_Performance - Fatal编程技术网

Python timeit.timeit的返回值是平均值还是最佳值?

Python timeit.timeit的返回值是平均值还是最佳值?,python,performance,Python,Performance,timeit命令行界面清楚地告诉我们,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

timeit命令行界面清楚地告诉我们,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
它仍然是最好的吗?

来自:它运行主语句的次数默认为1000000, 并返回执行所有次数所用的时间总和

您可以将number=10**8添加到您的通话中,并查看结果如何变化:

>>>导入时间信息 >>>timeit.timeit'charin text',setup='text=示例字符串;char=g' 0.03136014938354492 >>>timeit.timeit'charin text',setup='text=示例字符串;字符=g',数字=10**7 0.22713899612426758 >>>timeit.timeit'charin text',setup='text=示例字符串;字符=g',数字=10**8 2.130625009536743 >>> 命令行将“重复”选项设置为3:

重复计时器的次数默认为3次

“最好的”是这三个中最好的。这与number参数不同,当您不设置-n/-number参数时,它会自动为您确定

另一方面,timeit.timeit函数不会重复。它运行语句的次数,并给出总时间。从:

使用给定的语句、设置代码和计时器函数创建一个计时器实例,并使用数字执行运行其timeit方法

和来自:

主语句的执行次数。这将执行setup语句一次,然后返回执行main语句多次所需的时间,以秒为单位作为浮点值

如果要获得最佳结果,请使用:

在Python3中,通过新的和更好的规模处理,上述功能得到了很大的改进

使用您的语句和设置演示:

>>> 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
 timeit.repeat(stmt='pass', setup='pass', timer=<default timer>, repeat=3, number=1000000)
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)
>>> 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