Я написал две разные перекрестные функции, одна использует простое целочисленное вычисление, а другая - преобразование строк.
После измерения времени результаты оказались такими, как и ожидалось. Преобразование строк несколько медленнее.
Но! Если не выводить результат, а только присваивать значение переменной, время будет противоположным. Почему?
Вот код:
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))
Results with given code:
Crossfoot : 2.0396000000002384e-05
Crossfoot2: 3.288599999999933e-05
Если удалить строки с print(res)
, первая функция будет намного медленнее второй.
Results with print removed:
Crossfoot : 5.549999999999999e-06
Crossfoot2: 2.6244000000001655e-05
В чем причина этого?
Это не критично по времени, но я хотел бы понять причину.
@TheGamer007, конечно, ты прав - я, должно быть, был слеп. Просто опубликуйте это как ответ, я приму это.
crossfoot
остается быстрее в обоих случаях. Вы, наверное, пропустили, что это e-06
, когда вы удаляете вызов print
.
С обоими в e-05
это будет 0,554 против 2,624.
crossfoot
быстрее в обоих случаях. Может быть, вы пропустили, что этоe-06
, когда вы удалилиprint
? При прямом сравнении это будет 0,554 против 2,624.