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

问题描述

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

import timeit

def func():
    ...

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

这会返回类似 3.563012266666666e-05内容。我以前使用过 timeit,但从未发生过。有人知道它为什么这样做吗?

解决方法

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

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

Python 将使用科学记数法显示任何大小(低于或高于特定范围)。

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

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

此处,:.20 确保将数字打印到小数点后 20 位。但是,请记住,通过这样做,您将浮点数转换为字符串。这将返回:

>>> '0.00000009274555020966'
,

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

,

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