Как работает else в циклах питон
Перейти к содержимому

Как работает else в циклах питон

  • автор:

Циклы for и while, операторы break и continue, волшебное слово else

Python 3 логотип

В этой статье я расскажу о циклах for и while, операторах break и continue, а также о слове else, которое, будучи употребленное с циклом, может сделать программный код несколько более понятным.

Цикл while

While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.

Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла.

Оператор continue

Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)

Оператор break

Оператор break досрочно прерывает цикл.

Слово else, примененное в цикле for или while, проверяет, был ли произведен выход из цикла инструкцией break, или же «естественным» образом. Блок инструкций внутри else выполнится только в том случае, если выход из цикла произошел без помощи break.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Как работает функция else в Python?

В условных конструкция и циклах else является необязательным оператором.

В условных конструкция else срабатывает, в случае, если ни одно другое условие не подошло.

Пример 1

answer = 'yes' if answer = 'yes': print('Start game') else: print('Game over') # Output: Game over 

В циклах else сработает после всех итераций.

Пример 2

sum_ = 0 for i in range(100): sum_ += i else: print('Done') 

Пример 3

game_on = True while game_on: print('Do it game') else: print('Game over') 

Главный секрет блока else в циклах пайтона

Это короткая статья для новичков. Наверняка вы знаете, что в пайтоне для циклов for и while предусмотрен блок else . И с этим блоком возникает много путаницы, потому что его действие на первый взгляд неинтуитивно. Приходится тратить немного времени или заглядывать в документацию каждый раз, когда он встречается:

for f in files: if f.uuid == match_uuid: break else: raise FileNotFound()

Когда будет исключение: когда файл не найден? Когда найден? Когда список пуст? На этот вопрос сложно ответить, потому что блок else находится на одном уровне с блоком for и кажется, что это какое-то условие, относящиеся к самому списку; например, когда for не нашел ни одной записи. Но достаточно знать главный секрет блока else для циклов, чтобы больше никогда не терять на это время:

Блок else после циклов относится не к самому циклу, а к оператору break !

И действительно, блок else выполнится в любом случае, если только выполнение цикла не было прервано оператором break , return или raise .

Если читать пример выше так: «если файл имеет нужный нам uuid, то закончить цикл, иначе вызвать исключение», то все становится на свои места.

Использование блока else

Рассмотрим пример использования ключевого слова else в цикле while :

>>> i = 1 >>> while i < 4: . print(i) . i += 1 . else: . print('Вышли из цикла!')

Если выполнить этот цикл, то мы получим:

1 2 3 Вышли из цикла!

Здесь блок else выполняется только тогда, когда условие выхода из цикла перестает быть верным. Особенность здесь в том, что если вывалиться из цикла через break или через исключение, то блок else выполняться не будет.

Это работает не только с циклами while , но и с циклами for :

>>> for value in values: . if value == 4: . print('Нашли!:)') . break . else: . print('Не нашли:(')

И так же можно с try-except блоками. На самом деле исключения в Python это не try-except-finally, а try-except-else-finally, ниже пример:

>>> num = 0 >>> try: . result = 1 / num . except ZeroDivisionError: . print('Деление на ноль!') . else: . print('Конечное число.') . finally: . print('Вычисления закончены.') . Деление на ноль! Вычисления закончены.

А если задать num = float('Inf') , то в результате деления мы получим 0 и вывод будет:

Конечное число. Вычисления закончены.

Блок finally выполняется в любом случае. А else можно использовать, если нужно выполнить еще какой-то код в случае отсутствия исключений. Например, это может быть полезно в тестах, когда мы хотим логировать, как в случае падения теста на исключении, так и в случае, если исключений брошено не было.

В общем, есть конструкции while-else и for-else, в которых else отрабатывает в случае «штатного» завершения цикла. Еще else можно использовать в try-except блоке, чтобы выполнить какой-то код только в случае успешного выполнения блока try . Во всех случаях использование else позволяет более гибко управлять потоком выполнения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *