Многие программисты Python, вероятно, не знают, что синтаксис while
циклов и for
циклов включает необязательное else:
предложение:
for val in iterable:
do_something(val)
else:
clean_up()
Тело else
предложения является хорошим местом для определенных видов действий по очистке и выполняется при обычном завершении цикла: то есть, выход из цикла с предложением return
или break
пропуск else
предложения; выход после того, как continue
выполняет его. Я знаю это только потому, что только что посмотрел (еще раз), потому что не могу вспомнить, когда было выполнено else
предложение.
Всегда? На «провал» цикла, как следует из названия? На регулярное прекращение? Даже если цикл завершен с return
? Я никогда не могу быть полностью уверен, не глядя на это.
Я виню свою сохраняющуюся неопределенность в выборе ключевого слова: я нахожу else
невероятно немонемным для этой семантики. Мой вопрос не в том, «почему это ключевое слово используется для этой цели» (за который я бы, вероятно, проголосовал бы, хотя бы только после прочтения ответов и комментариев), а как я могу подумать о else
ключевом слове, чтобы его семантика имела смысл, и я может поэтому помнить это?
Я уверен, что было довольно много обсуждений по этому поводу, и я могу себе представить, что выбор был сделан для соответствия с предложением try
заявления else:
(которое я также должен посмотреть), и с целью не добавлять в список Зарезервированные слова Python. Возможно, причины выбора else
прояснят его функцию и сделают его более запоминающимся, но я после соединения имени с функцией, а не после исторического объяснения как такового.
Ответы на этот вопрос , который мой вопрос был кратко закрыт как дубликат, содержат много интересных предысторий. Мой вопрос имеет другую направленность (как связать определенную семантику else
с выбором ключевого слова), но я чувствую, что где-то должна быть ссылка на этот вопрос.
else
основном означает «если условие продолжения не выполнено». В традиционном цикле for условием продолжения обычно является i < 42
: в этом случае вы можете просмотреть эту часть какif i < 42; execute the loop body; else; do that other thing
break
. Канонический вариант использования - это когда цикл ищет что-то и прерывается, когда он это находит. else
Выполняется только тогда , когда ничего не найдено.