Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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的时间差_Python_Performance_Timeit - Fatal编程技术网

Python 从解释器和命令行使用timeit的时间差

Python 从解释器和命令行使用timeit的时间差,python,performance,timeit,Python,Performance,Timeit,从口译员那里,我得到: >>> timeit.repeat("-".join( str(n) for n in range(10000) ) , repeat = 3, number=10000) [1.2294530868530273, 1.2298660278320312, 1.2300069332122803] # this is seconds 从命令行,我得到: $ python -m timeit -n 10000 '"-".join(str(n) for n

从口译员那里,我得到:

>>> timeit.repeat("-".join( str(n) for n in range(10000) ) , repeat = 3, number=10000)
[1.2294530868530273, 1.2298660278320312, 1.2300069332122803] # this is seconds 
从命令行,我得到:

$ python -m timeit -n 10000 '"-".join(str(n) for n in range(10000))'
10000 loops, best of 3: 1.79 msec per loop # this is milli second 

为什么这两种情况下的计时幅度会有这种差异?

这两条线测量的东西不一样。在第一个代码段中,您正在计时计算
0-1-2-…-9999
。在第二个代码段中,您正在计时字符串串联
“-”。join(str(n)表示范围(10000)内的n))


此外,
timeit
repeat
报告总时间,而CLI则计算迭代次数的平均时间。因此,第一个代码实际上需要12.29毫秒“每循环”。

我看不到它。两次执行的代码都是
“-”。join(str(n)表示范围(10000)内的n)
,不是吗?它执行了不同的次数,但它是相同的代码?我忽略了什么?@TimPietzcker在第一个中,
“-”。计算范围(10000)内n的join(str(n))
,并将其结果传递给
timeit。重复。如果在所述代码段周围有其他引号,则两者将运行相同的代码。@delnam您能详细说明一下吗?我不明白!哦…现在我明白了。哇!谢谢这就是为什么我如此喜欢StackOverflow。@abc我们谈论的是第一个代码,它只是一个减法。字符串串联也发生在第一种情况下,但有一次,在
timeit
之外。我记得python在计算浮点数据类型时有问题。我建议您使用模块进行do计算。