Я заметил, что следующий код допустим в Python. Мой вопрос почему? Есть ли конкретная причина?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Я заметил, что следующий код допустим в Python. Мой вопрос почему? Есть ли конкретная причина?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
else
для этого использования был удивительно плохой идеей, и что они больше не будут делать этого.after:
.Ответы:
Предложение
else
выполняется только тогда, когда вашеwhile
условие становится ложным. Если выbreak
вышли из цикла или возникло исключение, оно не будет выполнено.Один из способов думать об этом - это конструкция if / else в отношении условия:
аналогично циклической конструкции:
Примером может быть такой:
источник
while {} something
за исключением того, чтоsomething
будет пропущено, если выbreak
вwhile
цикле.Предложение
else
выполняется, если вы обычно выходите из блока, выполняя условие цикла или опускаясь в нижнюю часть блока try. Он не выполняется, если выbreak
либоreturn
вышли из блока, либо вырастите исключение. Он работает не только для циклов while и for, но и для блоков try.Обычно вы обнаруживаете это в тех местах, где обычно вы выходите из цикла раньше, а выход из конца цикла - неожиданный / необычный случай. Например, если вы просматриваете список в поисках значения:
источник
found_it=False
в начале цикла, а затем сделать проверкуfound_it
в концеВ ответ на
Is there a specific reason?
это одно интересное приложение: преодоление нескольких уровней зацикливания.Вот как это работает: внешний цикл имеет разрыв в конце, поэтому он будет выполнен только один раз. Однако, если внутренний цикл завершается (не находит делителя), то он достигает оператора else и внешний разрыв никогда не достигается. Таким образом, разрыв во внутреннем цикле будет нарушать оба цикла, а не только один.
Для обоих
while
иfor
цикловelse
оператор выполняется в конце, если неbreak
был использован.В большинстве случаев есть лучшие способы сделать это (обернуть это в функцию или вызвать исключение), но это работает!
источник
Предложение else выполняется, когда условие while оценивается как false.
Из документации :
источник
Мой ответ будет сосредоточен на том, КОГДА мы можем использовать while / for-else.
На первый взгляд кажется, что при использовании
и
Потому что
print 'ELSE'
оператор, кажется, всегда выполняется в обоих случаях (оба, когдаwhile
цикл закончен или не запущен).Тогда это отличается только тогда, когда инструкция
print 'ELSE'
не будет выполнена. Это когдаbreak
внутри блока кода естьwhile
Если отличаются:
return
не в этой категории, потому что это делает тот же эффект для двух вышеупомянутых случаев.Повышение исключения также не вызывает разницы, потому что, когда оно возникает, то, где будет выполняться следующий код, находится в обработчике исключений (кроме блока), код в
else
предложении или сразу послеwhile
предложения не будет выполнен.источник
Я знаю, что это старый вопрос, но ...
Как сказал Раймонд Хеттингер, его следует называть
while/no_break
вместоwhile/else
.Мне легко понять, если вы посмотрите на этот фрагмент.
Теперь вместо проверки условия после цикла while мы можем поменять его местами
else
и избавиться от этой проверки.Я всегда читаю его,
while/no_break
чтобы понять код, и этот синтаксис имеет для меня гораздо больше смысла.источник
Предложение else выполняется только тогда, когда условие while становится ложным.
Вот некоторые примеры:
Пример 1: изначально условие ложно, поэтому выполняется условие else .
ВЫВОД:
Пример 2: пока условие
i < 5
не стало ложным , посколькуi == 3
перерывы цикл, поэтому еще придаточный не был выполнен.ВЫВОД:
Пример 3: в то время как условие
i < 5
становится ложным , когдаi
был5
, так еще придаточный был выполнен.ВЫВОД:
источник
Оператор
else:
выполняется тогда и только тогда, когда цикл while больше не соответствует своему условию (в вашем примере, когдаn != 0
false).Таким образом, результат будет следующим:
источник
Остальное выполняется, если цикл while не прерывался.
Мне нравится думать об этом с метафорой «бегун».
«Остальное» похоже на пересечение финишной линии, независимо от того, начали ли вы в начале или в конце трассы. «else» не выполняется, только если вы прервались где-то посередине.
Основными вариантами использования является использование этого выхода из вложенных циклов или если вы хотите запускать некоторые операторы, только если цикл где-то не прерывался (подумайте, что разрыв - это необычная ситуация).
Например, ниже приведен механизм выхода из внутреннего цикла без использования переменных или try / catch:
источник
Лучше использовать конструкцию while: else: в Python: если цикл не выполняется в while, тогда выполняется оператор else. То, как это работает сегодня, не имеет смысла, потому что вы можете использовать приведенный ниже код с такими же результатами ...
источник
else
блок не будет выполнен, если вы покидаете цикл, используя ключевое словоbreak
илиreturn
. В вашем примереprint
будет выполнено также, если цикл завершился поbreak
команде.Это полезно для социального взаимодействия.
источник
else
здесь? Код делает то же самое без него.break
во время обратного отсчета, не используяelse
, заставит вас сказать "С новым годом!" мгновенно, что не имеет никакого смысла.break
"? Там нетbreak
в коде.