python 时间结果不符合预期:time.time() - time.time()

在玩弄 的 python 执行时time,我发现time.time()在单个语句中调用两次时出现了奇怪的行为。time.time()在语句执行期间获取的处理延迟非常小。


例如time.time() - time.time()


如果在完美世界中立即执行,则计算结果为 0。


然而,在现实世界中,这会导致一个非常小的数字,因为在处理器执行第一次 time.time() 计算和下一次计算时存在假定的延迟。但是,当运行相同的执行并将其与以相同方式计算的变量进行比较时,结果会偏向一个方向。


请参阅下面的小代码片段。这也适用于非常大的数据集


import time


counts = 300000


def at_once():

  first = 0

  second = 0

  x = 0

  while x < counts:

      x += 1

      exec_first = time.time() - time.time()

      exec_second = time.time() - time.time()


      if exec_first > exec_second:

          first += 1

      else:

          second += 1



print('1sts: %s' % first)

print('2nds: %s' % second)

印刷:


1sts: 39630

2nds: 260370

除非我的逻辑不正确,否则我希望结果非常接近 50:50,但情况似乎并非如此。有没有人可以解释导致这种行为的原因,或者指出导致结果偏向一个方向的代码逻辑的潜在缺陷?


慕盖茨4494581
浏览 886回答 2
2回答

森林海

会不会是这样exec_first == exec_second?在这种情况下,您的 if-else 会将 1 添加到秒。尝试将您的 if-else 更改为以下内容:if exec_first > exec_second:&nbsp; &nbsp; first += 1elif exec_second > exec_first:&nbsp; &nbsp; second += 1else:&nbsp; &nbsp; pass

摇曳的蔷薇

您将所有关系分配给一个类别。尝试一个中间立场:import timecounts = 300000first = 0&nbsp;second = 0&nbsp;same = 0for _ in range(counts):&nbsp; &nbsp; exec_first = time.time() - time.time()&nbsp; &nbsp; exec_second = time.time() - time.time()&nbsp; &nbsp; if exec_first == exec_second:&nbsp; &nbsp; &nbsp; &nbsp; same += 1&nbsp; &nbsp; elif exec_first > exec_second:&nbsp; &nbsp; &nbsp; &nbsp; first += 1&nbsp;&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; second += 1&nbsp;print('1sts: %s' % first)print('same: %s' % same)print('2nds: %s' % second)输出:$ python3 so.py1sts: 53099same: 1946162nds: 52285$ python3 so.py1sts: 57529same: 1867262nds: 55745另外,我对您为什么认为函数调用可能需要 0 时间感到困惑。每次调用都至少需要访问系统时钟并将该值复制到某种临时位置。这在任何当前的计算机上都不是免费的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python