timeit.timeit 以科学计数法返回时间?

timeit.timeit returning time in scientific notation?

我正在使用 timeit.timeit 函数为我自己的一个函数计时,但返回的时间是科学计数法。

import timeit

def func():
    ...

print(timeit.timeit(stmt="func()", setup="from __main__ import func", number=100000)/100000)

这 returns 类似于 3.563012266666666e-05。我以前用过timeit,但是从来没有出现过这种情况。有人知道为什么要这样做吗?

3.563012266666666e-05 并不是真正的指数形式;这只是科学计数法。 3.563012266666666e-05 等于 0.00003563012266666666。科学计数法用于表示非常大或非常小的数字。

发生这种情况是因为您将它除以 1000。如果您不这样做,则输出如下所示:

>>> print(timeit.timeit(stmt="func()", setup="from __main__ import func", number=100000))
>>> 0.009756448998814449

Python 将使用科学记数法显示任何大或小的数字(低于或超过一定范围)。

如果你想像以前一样看到结果,你可以像这样利用 Python 的字符串格式:

>>> t = timeit.timeit(stmt="func()", setup="from __main__ import func", number=100000)/100000
>>> f"{t:.20f}"

此处,:.20 确保它会打印最多 20 位小数的数字。但是,请记住,这样做是将浮点数转换为字符串。这将 return:

>>> '0.00000009274555020966'

这可能是因为你在检索时间后进行了划分。您可以在使用 f strings (f"{time:.4f}") 打印值时对其进行格式化 .4f 告诉 python 将该值打印为带小数点后 4 位的浮点数,您可以根据需要设置它的大小,以查看您想要的位数。