Почему у 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 не будет выполняться.

  • ValueError: неверный литерал для int () с базой 10
  • Как использовать Python 3 и Django с Apache?
  • Невозможно установить модули через pip на python 3.4
  • Python 3.0 и эволюция языка
  • Бесконечное целое число в Python
  • Как я могу использовать functools.singledispatch с методами экземпляра?
  • Сценарий Python 3 для загрузки файла на URL REST (многостраничный запрос)
  • Что делать -> делать в python
  • Python - лучший язык программирования в мире.