为什么int计算比字符串转换慢?

时间:2019-05-28 12:23:49

标签: python-3.x

我写了两个不同的crossfoot函数,一个使用简单的整数计算和一个字符串转换。

测量时间后,结果符合预期。字符串转换要慢一些。

但是!如果不打印结果,而只对变量赋值,则时序相反。为什么?

代码如下:

import time


def crossfoot(num, iterated=False):
    result = 0
    while num:
        result += num % 10
        num //= 10

    if iterated:
        num = result
        result = 0
        while num:
            result += num % 10
            num //= 10

    return result


def crossfoot2(num, iterated=False):
    digits = [int(x) for x in str(num)]

    result = sum(digits)

    if iterated and result > 9:
        return crossfoot2(result, True)

    return result

这是我所做的测试:

start = time.process_time()
res = crossfoot(20991231235959, True)
print(res)
end = time.process_time()
print("Crossfoot : {}".format(end-start))

start = time.process_time()
res = crossfoot2(20991231235959, True)
print(res)
end = time.process_time()
print("Crossfoot2: {}".format(end-start))
  

使用给定代码的结果:
Crossfoot:2.0396000000002384e-05
  Crossfoot2:3.288599999999933e-05

如果使用print(res)删除行,则第一个功能将比第二个功能慢。

  

已删除打印结果:
  横尺:5.549999999999999e-06
  Crossfoot2:2.6244000000001655e-05

这是什么原因?

这不是时间紧迫性,但我想了解原因。

1 个答案:

答案 0 :(得分:1)

在两种情况下,

Get-ChildItem -Path 'Cert:\LocalMachine\' -Recurse | Format-List -Property Subject 都保持更快的速度。您可能会错过删除crossfoot调用时的e-06

如果两者均为print,则分别为0.554和2.624