Python: Продолжение к следующему повторению во внешнем цикле

Person JeffAtwood;
Person JoelSpolsky;
JeffAtwood.TalkTo(JoelSpolsky);

Здесь не надеется ни на какую хвостовую рекурсию!

113
задан Lightness Races with Monica 30 May 2011 в 22:59
поделиться

3 ответа

for ii in range(200):
    for jj in range(200, 400):
        ...block0...
        if something:
            break
    else:
        ...block1...

Break прервет внутренний цикл, а блок 1 не будет выполнен (он будет запущен только в том случае, если внутренний цикл завершается нормально).

132
ответ дан 24 November 2019 в 02:41
поделиться

На других языках вы можете пометить цикл и выйти из помеченного цикла. Предложение по улучшению Python (PEP) 3136 предлагало добавить их в Python , но Гвидо отклонил его :

Однако я отклоняю его на том основании, что код настолько сложен для требовать эту функцию очень редко. В большинстве случаев существуют существующие обходные пути, которые производят чистый код, например, используя return. Хотя я уверен, что есть некоторые (редкие) реальные случаи, когда ясность code would suffer from a refactoring that makes it possible to use Возвращаясь, это компенсируется двумя проблемами:

  1. Сложность, постоянно добавляемая к языку. Это не влияет только все реализации Python, но также и все инструменты анализа исходного кода, плюс, конечно, вся документация по языку.

  2. Я ожидаю, что этой функцией будут злоупотреблять больше, чем она будет используется правильно, что приводит к чистому снижению ясности кода (измеряется по весь код Python, написанный отныне). Ленивые программисты везде, и прежде чем вы это узнаете, у вас в руках невероятный беспорядок неразборчивый код.

Так что, если вы на это надеялись, вам не повезло, но посмотрите на один из других ответов, там есть хорошие варианты.

40
ответ дан 24 November 2019 в 02:41
поделиться

Я думаю, вы могли бы сделать что-то вроде этого:

for ii in range(200):
    restart = False
    for jj in range(200, 400):
        ...block0...
        if something:
            restart = True
            break
    if restart:
        continue
    ...block1...
12
ответ дан 24 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: