Рассмотрим следующий построчный анализ классического for-l oop:
1 for (int i = 0; i < N; i++) { | 1 + N + (N - 1)
2 |
3 //do something | c
4 |
5 } |
В этом примере для инициализации for-l oop требуется одна примитивная операция, условие l oop проверяется N
раз, а переменная i
увеличивается N - 1
раз, в то время как тело l oop принимает c
операций примита для некоторой константы c
. Это означает, что строка 1
выполняется 1 + N + (N - 1)
раз, а тело l oop выполняется N
раз. Однако в Python этот анализ не будет работать, потому что циклы for в Python реализуются с использованием итераторов. Рассмотрим следующий простой пример:
1 for i in range(len(N)): | ?
2 //do something | c
Если бы я хотел построчно проанализировать время работы этого фрагмента кода, как я уже делал выше, как бы я это сделал? Должен ли я предполагать, что строка 1 выполняется N
раз, как в классическом for-l oop, или имеет смысл сказать, что в Python строка 1 выполняется один раз, и только тело l oop выполняется N
раз?