Не мог выйти за .. в диапазоне.. цикл путем изменения значения итератора в python [дублировать]

На этот вопрос уже есть ответ здесь:

У меня есть следующий сценарий:

    for i in range (10):
        print i
        i = 11

Когда я выполняю этот сценарий, я ожидал распечатать только 0, но вместо этого он печатает от 0 до 9. Почему i=11 не остановил цикл for?

1 ответ

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

    Внутренне цикл for как это

    for elem in iterable:
        #stuff 
    #other stuff
    

    преобразуется во что-то вроде этого (для любого материала и для любой итерации)

    iterator = iter(iterable)
    while True:
        try:
            elem = next(iterator)
            #stuff
        except StopIteration:
            break
    #other stuff
    

    итератор, построенный iter, увеличит исключение StopIteration, когда внутри него больше нет элементов, и для получения следующего элемента вы используете next . break используется для завершения цикла for / while, а try-except-для перехвата и обработки исключений.

    Как вы можете видеть, любое изменение, которое вы делаете elem(или iв вашем случае), бессмысленно для того, сколько итераций у вас будет или его следующее значение.

    Чтобы остановить for-loop преждевременно вы используете break, в вашем случае это было бы

    for i in range(10):
        print i
        break