【问题标题】:Why is time.time() - time.time() = 0.0?为什么 time.time() - time.time() = 0.0?
【发布时间】:2018-06-20 03:06:48
【问题描述】:
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import time
>>> time.time() - time.time()
0.0

为什么会这样?从我的简单理解来看,这个函数以秒为单位返回系统时钟,从调用的确切时间开始。但是对 time.time() 的两次调用不应该返回稍微不同的浮点数吗?

【问题讨论】:

  • 我有另一个结果>>>> time() - time() -1.9073486328125e-06。也许你的电脑太快了(:
  • 每次运行都是0.0吗?
  • 顺便说一句,[time.time() for _ in range(50)] 在我的机器上生成大约 11 个唯一时间戳。
  • 这取决于操作系统使用的时间片。 time.time() - time.time() -> -9.5367431640625e-07.
  • 我在 Python 2 上尝试了这个,每 3-4 次尝试中大约有 1 次得到 0.0 结果。但我在 Python 3 上尝试了 20 多次,但从未得到 0.0。

标签: python python-3.x time


【解决方案1】:

计时器的分辨率不是无限的;它会周期性地小幅上升。如果两个调用足够接近,您将看到零值。如果您尝试大量此类调用,您可能会发现差异大部分时间为零,其余时间为几微秒,具体取决于您特定系统的速度、硬件细节和内核实现。

【讨论】:

  • 谢谢,我相信 足够接近 就是我的情况。
【解决方案2】:

根据docs on time.time

...即使时间总是以浮点数形式返回,并非所有系统都提供比 1 秒更好的时间精度

(我的重点)。对于 Python3.3+,请改用 time.perf_counter。 或者对于 Python3.2 或更早版本,或者为了向后兼容,使用 timeit.default_timer,它会尝试为您选择最准确的时钟 系统。

【讨论】:

  • 你知道哪些系统不能提供比 1 秒更好的精度吗?
  • @JacobLee:我不确定这是否是文档所指的内容,但取决于 Windows 的配置方式,may only provide 1 second accuracy。 (该链接是通过this question 找到的。)
  • 感谢您对此进行调查。测量间隔 t2 - t1 的精度将取决于时钟的稳定性和时钟的精度或分辨率(最小的时间增量),而不取决于 time1 和 time2 是否“真实”时钟时间与权威时钟有关。当然,Python 可以在各种各样的系统上运行,而 time.time() 取决于该名称的系统相关 C 程序,因此它可能只是一个开放式警告。
【解决方案3】:

并非总是如此,仅取决于您的 CPU 调度和时钟:

n, d = 0, 0.0
while d == 0.0:
     d = time.time() - time.time()
     n += 1
print(n, d)

26096 -0.0010001659393310547

【讨论】:

  • 谢谢,我认为这个函数是我理解发生了什么的最好方法。
【解决方案4】:

Python 的 time.time() 生成自纪元以来的时间量,以三分之一微秒为单位,我喜欢将其称为增量单位。这意味着每秒有 300 万个增量。

就像时钟只将时间报告到最接近的秒数一样,python 只会将时间报告到最近的增量。因此,如果您的代码可以在时间移动到下一个增量之前完成,它将报告为 0.0!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-10
    • 2011-09-02
    • 2016-12-15
    • 2015-10-22
    • 2016-10-08
    • 2011-12-22
    • 2021-11-20
    • 2017-04-06
    相关资源
    最近更新 更多