Перейти к основному содержимому

Применение else к циклам

Принцип работы

Применять else можно не только if, но еще и к циклам. Работает это так:

Если цикл не был прерван с помощью break, то отрабатывает блок else.

arr = [1, 2, 3]
to_find = int(input('Введите число для поиска: '))

for i, item in enumerate(arr):
if item == to_find:
print(f'Элемент {to_find} имеет индекс {i}')
break
else:
print(f'Элемента {to_find} нет в списке')
Введите число для поиска: 2
Элемент 2 имеет индекс 1
Введите число для поиска: 5
Элемента 5 нет в списке

Можно считать, что else применяется не к циклу, а к break. Кому-то так легче запомнить принцип работы)

Зачастую это используется для задач поиска, так как с помощью данной конструкции можно обработать случаи когда элемент найден и когда элемент не найден.

while-else используется очень-очень редко, потому что в 99% его можно заменить обычным for-else.

Критика

Несмотря на то, что конструкция довольно удобная, у нее есть достаточно много противников, считающих, что она ухудшает читабельность кода.

Если вы редко встречаете for-else, то, действительно, это может привести вас в замешательство. Если бы вы первый раз увидели такой код, о чем бы вы подумали?

for x in range(3):
...
else:
print('Done')

Логичнее было бы заменить else на nobreak. Тогда человеку, который недостаточно близко знаком с синтаксисом Python, эта конструкция даст ему знать, что Done напечатается в случае если не было break.

for x in range(3):
...
nobreak:
print('Done')

Ссылки