首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python的结果与预期不同: time.time() - time.time()

python的结果与预期不同: time.time() - time.time()
EN

Stack Overflow用户
提问于 2018-12-11 23:00:53
回答 2查看 168关注 0票数 1

在处理time的python执行过程中,在单个语句中两次调用time.time()时,我发现了一种奇怪的行为。在语句执行期间获得time.time()有一个很小的处理延迟。

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

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

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

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

代码语言:javascript
运行
复制
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)

指纹:

代码语言:javascript
运行
复制
1sts: 39630
2nds: 260370

除非我的逻辑不正确,否则我预计结果将接近50:50,但情况似乎并非如此。有没有人能解释是什么导致了这种行为,或者指出了代码逻辑的潜在缺陷,从而使结果向一个方向倾斜?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-11 23:04:13

会是那个exec_first == exec_second吗?如果-否则会增加1比2在这种情况下。

试着改变你,如果-如果-其他的事情,比如:

代码语言:javascript
运行
复制
if exec_first > exec_second:
    first += 1
elif exec_second > exec_first:
    second += 1
else:
    pass
票数 3
EN

Stack Overflow用户

发布于 2018-12-11 23:08:33

你把所有的联系都分配给一个类别。用一种中间的立场来尝试:

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
$ python3 so.py
1sts: 53099
same: 194616
2nds: 52285
$ python3 so.py
1sts: 57529
same: 186726
2nds: 55745

另外,我也不明白为什么您认为函数调用可能需要0时间。每次调用至少需要访问系统时钟,并将该值复制到某个类型的临时位置。这在任何当前计算机上都不是没有开销的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53733633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档