我写了两个不同的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
这是什么原因?
这不是时间紧迫性,但我想了解原因。
答案 0 :(得分:1)
Get-ChildItem -Path 'Cert:\LocalMachine\' -Recurse | Format-List -Property Subject
都保持更快的速度。您可能会错过删除crossfoot
调用时的e-06
。
如果两者均为print
,则分别为0.554和2.624