问题描述
我正在使用 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 个小数位的浮点数,您可以根据需要将其设置为小或大,以查看所需的位数。