Применение 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')