← Все вопросы

else в цикле

Задан 2 месяца назад28 просмотров2 ответа
1

В Python у циклов for и while есть блок else, который выполняется, когда цикл заканчивается «естественным путём». Но ведь тот же код можно просто написать после цикла без else! Зачем тогда это вообще нужно?

2 ответа

1

else у цикла срабатывает, только если цикл дошёл до конца без break. В этом весь смысл: он избавляет от флага «нашли/не нашли».

Классика — поиск:

for user in users:
    if user.id == target:
        print('нашли:', user.name)
        break
else:
    print('никого не нашли')

Без else пришлось бы заводить found = False, ставить True перед break и проверять после цикла. Три лишние строки.

Так что «просто написать код после цикла» — не то же самое: тот код выполнится всегда, а ветка else — только когда break не сработал.

1

Технически в соседнем ответе всё верно, но добавлю ложку дёгтя: за несколько лет я for/else в живом коде видел раза три, и каждый раз читающий спотыкался. Слово else интуитивно читается как «если цикл не выполнился», а работает ровно наоборот.

Если поиск оформить функцией, конструкция вообще не нужна:

def find_user(users, target):
    for u in users:
        if u.id == target:
            return u
    return None

Дошли до return None — значит, не нашли. Читается без сносок в документацию. Знать for/else стоит, тащить его в каждый код — дело вкуса.

Ваш ответ

, чтобы ответить на вопрос.