Цикл For-Else похож на оператор if-else? Что стоит за этой необычной конструкцией?

Эта статья предназначена для новичков, пытающихся понять, что такое Python-кодирование. Будучи новичком в Python, меня сначала смутил цикл For-Else. Название предполагает сходство с условием if-else, что наводит меня на мысль, что оно ведет себя аналогично (т. е. если блок «for» разрывается, блок «else» выполняется). На самом деле все наоборот: если блок for прерывается, то else также не выполняется, и наоборот. Это лингвистически (и логически) необычно для блока else. Так почему же цикл For-Else разработан таким образом?

Короткий ответ: он создан по образцу инструкции try-except-else-finally. Длинный ответ ниже…

Давайте сначала разберемся с работой цикла for-else на примере:

CODE>>
for i in range(10):
    print(i)
    break
else:
    print('Hello')

Приведенный выше код ничего не вернет на консоль.

CODE>>
for i in range(10):
    print(i)
else:
    print('Hello')
OUTPUT>> 
1
2
3
4
5
6
7
8
9
'Hello'

Приведенный выше код напечатает 1, 2, 3, 4, 5, 6, 7, 8, 9, а затем «Hello» в последующих строках.

Чтобы понять, почему у нас есть блок else, который не ведет себя как типичный блок else, вероятно, он был смоделирован на основе оператора try-except-else-finally, который используется для обработки исключений. Чтобы понять это, давайте посмотрим на различные блоки в операторах обработки исключений Pythonic:

try:
    # block1
except:
    # block2 → executed if block1 fails
else:
    # block3 → executed if block1 works!
finally:
    # block4 → executed every time, no matter 'except' and 'else' are executed or not

Цикл for-else в основном предназначен для обработки исключений и включает блок else в том же контексте, что и блок else в операторах try-except-else-finally, где блоки try и exclude представлены блоком for. Следовательно, else выполняется, если нет исключений (т. е. не встречаются разрывы), а else не выполняется (вместе с циклом for), если цикл прерывается.

Это объяснение основано на моем понимании и предположениях и призвано помочь объяснить это сомнение, если оно у вас возникло. Надеюсь, поможет :)