Comments 10
а нельзя просто заменить ??
for i in power_2():
на
for i in range(11);
for i in power_2():
на
for i in range(11);
0
У вас в «быстром» варианте очевидная ошибка — вы инициализируете переменную total_2 в теле цикла, а нужно — до него. Ну и про сам цикл я лучше промолчу.
А как переместите инициализацию, так и получите одинаковые времена.
А как переместите инициализацию, так и получите одинаковые времена.
0
просто добавить 1, то этой займет больше времени, чем само возведение в 200000 степень.
Возведение в степень заняло 24 мс, прибавление единицы — 0.024 мс, судя по вашему скриншоту. Так почему вы утверждаете, что прибавление заняло больше времени?
Быстрее, кстати, не стало. Total time во втором случае фальшивый, вы просто второй раз выводите время последней итерации.
0
Наглядное пособие о том, как не надо писать бенчмарки. «Прогрева» нет, операции выполняются по одному разу (оценивать стоит по avg/med), ну и откровенные баги с подсчётом времени, которые уже указали выше.
+1
- функция power_2 бесполезна и её результат аналогичен обычному range(11)
if i < 11:
бесполезен, range(11) последним числом вернет 10
>>> list(range(11)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- переменные в теле цикла не инициализируют, например
d = 0
иd += i**200000
фактически просто прибавление i**200000 к нулю.
Итого после исправления некоторых ошибок:
>>>
>>>
>>> d = 0
>>> total_2 = 0
>>>
>>> for i in range(1, 11):
... start = time()
... d += i**200000
... end = time()
... total_2 += end - start
... # print('Iteration {} lasts {}'.format(i, round(total_2, 6)))
...
>>> print(' \n End with total time {} \n'.format(round(total_2,3)))
End with total time 0.077
>>>
>>>
>>>
>>> from time import time # импорт модуля времени
>>>
>>>
>>> total_1 = 0
>>>
>>> def power_1(x):
... global total_1
... start = time()
... power = x**200000
... end = time()
... total_1 += end - start
... return round(total_1,6)
...
>>> # простые операции сложения, для того что бы посчитать отдельно время операции
... power_1(1) + power_1(2) + power_1(3) + power_1(4) + power_1(5) + power_1(6) + power_1(7) + power_1(8) \
... + power_1(9) + power_1(10)
0.308704
>>>
>>> print(' \n End with total time {} \n'.format(round(total_1,3)))
End with total time 0.078
Тут бы еще поправить подсчет времени – сложение для больших чисел, как вы заметили, тоже требует времени, а оно тут не учитывается. Очевидно, что при исправлении ошибок код эквивалентен.
0
Стоит почитать про генераторы и итераторы в Python перед тем как писать подобные статьи.
0
Sign up to leave a comment.
Ускорить сложные вычисления с минимальной загрузкой RAM