python时间结果与预期不符:时间。时间() 时间。时间()

2024-04-26 12:52:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用python执行time时,我发现在一条语句中调用time.time()两次时有一个奇怪的行为。在语句执行期间获取time.time()有一个非常小的处理延迟。你知道吗

例如时间。时间() - 时间。时间()

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

然而,在现实世界中,这会导致一个非常小的数字,因为在处理器执行第一个命令时有一个假定的延迟时间。时间()计算和下一步。但是,当运行相同的执行并将其与以相同方式计算的变量进行比较时,结果会向一个方向倾斜。你知道吗

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

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,但事实似乎并非如此。有没有人能解释是什么导致了这种行为,或者指出代码逻辑的潜在缺陷,从而使结果向一个方向倾斜?你知道吗


Tags: time时间世界数字语句逻辑处理器方向
1条回答
网友
1楼 · 发布于 2024-04-26 12:52:47

会是exec_first == exec_second吗?在这种情况下,你的if-else会增加1到2秒。你知道吗

试着把你换成:

if exec_first > exec_second:
    first += 1
elif exec_second > exec_first:
    second += 1
else:
    pass
网友
2楼 · 发布于 2024-04-26 12:52:47

将所有关系指定给一个类别。试着采取中间立场:

import time

counts = 300000
first = 0 
second = 0 
same = 0

for _ in range(counts):
    exec_first = time.time() - time.time()
    exec_second = time.time() - time.time()

    if exec_first == exec_second:
        same += 1
    elif exec_first > exec_second:
        first += 1 
    else:
        second += 1 

print('1sts: %s' % first)
print('same: %s' % same)
print('2nds: %s' % second)

输出:

$ python3 so.py
1sts: 53099
same: 194616
2nds: 52285
$ python3 so.py
1sts: 57529
same: 186726
2nds: 55745

另外,我很困惑为什么你认为一个函数调用可能需要0个时间。每次调用至少需要访问系统时钟并将该值复制到某种临时位置。这不是免费的开销在任何当前的计算机。你知道吗

相关问题 更多 >