Подтвердить что ты не робот

Поведение цикла "За" для Python

Почему следующий простой цикл не сохраняет значение i в конце цикла?

for i in range( 1, 10 ):
    print i
    i = i + 3

Вышеприведенные отпечатки:

1
2
3
4
5
6
7
8
9

Но он должен печатать:

1
4
7
4b9b3361

Ответ 1

for устанавливает i каждую итерацию, до следующего значения от повторного итерации объекта. Все, что вы установили в цикле i, в этой точке игнорируется.

В документации for:

Затем пакет выполняется один раз для каждого элемента, предоставленного итератором, в порядке возрастания индексов. Каждый элемент по очереди присваивается целевому списку с использованием стандартных правил для назначений, а затем выполняется пакет.

i - это список целей здесь, поэтому каждому из объектов присваивается значение range(1, 10). Установка i на что-то еще позже не изменит выражения range(1, 10).

Если вы хотите создать цикл, в котором вы изменяете i, вместо этого используйте цикл while; он переустанавливает условие каждый раз с помощью:

i = 1
while i < 10:
    print i
    i += 3

но будет проще просто использовать range() с шагом, создавая значения спереди:

for i in range(1, 10, 3):
    print i