Оператор цикла for else в Python — как работает
В этом уроке вы узнаете об операторе for…else в Python, как работает и о том, как его эффективно использовать.
Знакомство с оператором for else в Python
В Python оператор for может иметь необязательное предложение else, с которым вы, возможно, не знакомы, особенно если вы работаете с другими языками, такими как Java или C#.
Ниже показан синтаксис оператора for с блоком else:
for item in iterables: # process item else: # statement
В этом синтаксисе else будет выполняться только в том случае, если цикл работает нормально. Другими словами, условие else не будет выполнено, если в цикле встретится оператор break.
Кроме того, блок else также выполняется, когда объект итерации не имеет элемента.
Следующая блок-схема иллюстрирует оператор for…else:
Оператор else весьма полезен в некоторых случаях, если вы знаете, как его эффективно применять.
Пример оператора for…else в Python
Предположим, что у нас есть список людей, где каждый человек представляет собой словарь, состоящий из имени и возраста, например:
people = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 22}, {'name': 'Peter', 'age': 30}, {'name': 'Jenifer', 'age': 28}]
И мы хотим найти человека по имени.
Если список содержит человека, нам нужно отобразить информацию об этом человеке. В противном случае мы хотим показать сообщение о том, что имя не найдено.
Для этого можно придумать такую программу:
people = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 22}, {'name': 'Peter', 'age': 30}, {'name': 'Jenifer', 'age': 28}] name = input('Enter a name:') found = False for person in people: if person['name'] == name: found = True print(person) break if not found: print(f'{name} not found!')
Как это работает:
- Сначала запросим имя с помощью функции input().
- Затем установим для флага(найдено) значение False. Если входное имя совпадает с именем человека в списке, установим для него значение True, отобразим информацию о человеке, затем выйдем из цикла с помощью оператора Break.
- Наконец, проверим найденный флаг и отобразим сообщение.
Следующий код запускает программу с именем Peter и Maria:
1-й запуск:
Enter a name:Peter {'name': 'Peter', 'age': 30}
2-й запуск:
Enter a name:Maria Maria not found!
Она работает отлично. Однако если вы используете оператор for else, программа будет намного короче.
Ниже показана новая версия программы, в которой используется оператор for else:
people = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 22}, {'name': 'Peter', 'age': 30}, {'name': 'Jenifer', 'age': 28}] name = input('Enter a name:') for person in people: if person['name'] == name: print(person) break else: print(f'{name} not found!')
Используя оператор for else, программе не нужно использовать флаг и оператор if после цикла.
В этой новой программе, если введенное имя соответствует человеку в списке, она покажет информацию о человеке и выйдет из цикла с помощью оператора Break. Когда цикл встречает оператор Break, предложение else не выполняется.