В Python вы не создаете дополнительную переменную в описанной вами ситуации.
for i in range(10):
Создает объект диапазона, по которому цикл повторяется.Объект range хранит свое текущее значение в любой момент времени.i
- это просто имя, которое создано и привязано к этому значению.
Переменная существует независимо от того, имеет она имя или нет, поскольку объект диапазона должен знать свое текущее значение.
Если вы думаете о цикле в терминах инструкций процессора, вы понимаете, почему должна быть переменная:
push x
loop:
do something
increment x
jump if x > y
goto loop
В некоторых языках, скомпилированных JIT, есть средство, которое иногда обнаруживает циклэто всего лишь небольшое количество повторений одного и того же кода и оптимизирует код, чтобы быть серией одинаковых инструкций.Но, насколько я знаю, python не делает ничего подобного.
Вот цикл for в байт-коде:
4 0 SETUP_LOOP 20 (to 23)
3 LOAD_GLOBAL 0 (range)
6 LOAD_FAST 0 (x)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 6 (to 22)
16 STORE_FAST 1 (i)
5 19 JUMP_ABSOLUTE 13
>> 22 POP_BLOCK
Обратите внимание, что нет сравнения.Цикл завершается объектом итерации, вызывающим StopIteration, интерпретатор затем просматривает настройку цикла и переходит к концу цикла (в нашем случае 23).
Конечно, вы можете избежать всего этого, простоповторяя ваш код х количество раз.Как только это число может измениться, должно быть какое-то средство для предоставления функции next () и StopIteration для цикла for. Помните, цикл for для python в любом случае сравним с циклом for-each в Java.На самом деле традиционного цикла for вообще не существует.
Просто в стороне: я всегда использую i, j и k для итерации переменных.Использование подчеркивания как-то кажется мне не элегантным.