Почему у Python есть «else» в «for-else» и «while-else»?

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

Например:

for i in range(1, 5): print i else: print 'over' 

А также

 for i in range(1, 5): print i print 'over' 

одинаковы.

Итак, почему Python имеет «еще» в «for-else» и «while-else»?

2 Solutions collect form web for “Почему у Python есть «else» в «for-else» и «while-else»?”

Вы ошибаетесь в семантике for / else. Предложение else выполняется только в том случае, если цикл завершен, например, если оператор break не встречался.

Типичный для / else цикл выглядит следующим образом:

 for x in seq: if cond(x): break else: print "Didn't find an x I liked!" 

Подумайте о «else» как о спаривании со всеми «if» в теле цикла. Ваши образцы одинаковы, но с фразами «break» в миксе, это не так.

Более длинное описание той же идеи: http://nedbatchelder.com/blog/201110/forelse.html

Оператор for ... else используется для реализации циклов поиска.

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

 for z in xrange(10): if z == 5: # We found what we are looking for print "we found 5" break # The else statement will not execute because of the break else: # We failed to find what we were looking for print "we failed to find 5" z = None print 'z = ', z 

вывод:

 we found 5 z = 5 

Этот поиск такой же, как

 z = None for z in xrange(10): if 5 == z: # We found what we are looking for break if z == None: print "we failed to find 5" else: print "we found 5" print 'z = ', z 

Помните, что for не инициализирует z, если список поиска пуст (т.е. [] ). Вот почему мы должны гарантировать, что z определяется, когда мы используем его после поиска. Следующее вызовет исключение, потому что z не определяется, когда мы пытаемся его распечатать.

 for z in []: if 5 == z: break print "z = ",z 

вывод

  print "z = ",z NameError: name 'z' is not defined 

Таким образом, предложение else будет выполняться всякий раз, когда цикл for завершается естественным образом. Если в цикле for возникает разрыв или исключение, оператор else не будет выполняться.

  • Как добавить элемент в верхней части OrderedDict в python?
  • Heroku Python3.5 Ошибка импорта: нет модуля с именем = '_ tkinter'
  • Извлечение содержимого из каталога на сетевом диске (Windows)
  • «Ошибка имени: имя« get_ipython »не определено» при подготовке сеанса отладки через «import ipdb»
  • Разбор конфигурации файла с тем же именем раздела в python
  • Как анализировать таблицу HTML с помощью рядов в Python?
  • Удаление пустых строк из ноутбука Jupyter
  • Макет множественного возвращаемого значения, включая исходное поведение
  • Преобразование csv-файла в словарь
  • Python3: недопустимый синтаксис
  • Нужен быстрый способ подсчета и суммирования итерации за один проход
  •  
    Interesting Posts for Van-Lav

    Возвращать текстовую строку из физических координат в PDF с помощью Python

    Несколько проектов с использованием нескольких скриптов setup.py?

    Сокет Python получает большое количество данных

    Установка functools дает мне объект AttributeError 'module' не имеет атрибута 'compose'

    Удаление определенных файлов с помощью python

    Как найти путь к файлу сертификата SSL?

    Невозможно воспроизвести видео в формате HTML5 с помощью Flask

    Использование блокировки резьбы в функции обратного вызова ctypes

    Почему функции matplotlib imshow () и show () показывают изображения в другой цветовой схеме в зависимости от того, читаются ли они как uint8 или in64?

    Разделение букв из чисел внутри строки

    TypeError: worker () принимает 0 позиционных аргументов, но 1 дано

    как скоро вызывается `__del__` после того, как счетчик ссылок падает до нуля?

    Использование Python с homebrew в OS X

    Создание нескольких модулей Python в разных каталогах, которые разделяют часть структуры пакета

    Как избежать обработки пустого stdin с помощью python?

    Python - лучший язык программирования в мире.