В цій статті ми розглянемо конструкцію for ... else
та while ... else
,
одну з найрідше використовуваних особливостей мови Python. Обидва цикли мають
необов'язкову умову else
(як if
та try
), яка виконується, якщо ітерації
циклу успішно завершуються. Іншими словами оператор else
буде виконано, якщо
ми вийдемо з циклу звичайним шляхом, а не будь-яким іншим. Таким чином
всередені циклу не повинно бути ні break
, ні return
, чи викликів винятків,
Розглянемо простий (і некорисний) приклад:
for i in range(5):
print(i)
else:
print('Всі елементи ітеровано :)')
Результат:
0
1
2
3
4
Всі елементи ітеровано :)
У наведеному вище коді ми перебираємо діапазон з 5 чисел і виводемо на їх на
екран. Як тільки цикл нормально завершився виконується оператор else
і нам
виводиться Всі елементи ітеровано :). І навпаки, якщо ми зупинемо цикл,
скажімо, за допомогою break
то else
не буде виконано:
for i in range(5):
if i == 2:
break
print(i)
else:
print('Всі елементи ітеровано :)')
Результат:
0
1
Слід зазначити, що else
виконається навіть якщо послідовність, яка
ітерується є пустою; Адже цикл всерівно завершується нормально:
for i in []:
print(i)
else:
print('Все проітеровано (тобто нічого)')
Все проітеровано (тобто нічого)
Крім того, давайте не забувати, все вище вказане також застосовується і до
while...else
:
i = 0
while i <= 5:
i += 1
print i
else:
print 'Ага'
1
2
3
4
5
Ага
Але чому!?
Звичайний сценарій використання оператору else
в циклах - реалізація
пошукових циклів; скажімо, ви виконуєте пошук елемента, який задовольняє
певній умові, і необхідно виконати додаткову обробку або викликати помилку,
якщо не знайдено прийнятне значення:
for x in data:
if meets_condition(x):
break
else:
# обробка помилок або додаткові дії
Без else
необхідно встановити прапорець, а потім перевірити, щоб значення
задовольняло умову:
condition_is_met = False
for x in data:
if meets_condition(x):
condition_is_met = True
if not condition_is_met:
# обробка помилок або додаткові дії
Насправді, це не велика проблема, і ви повинні робити це і в багатьох інших
мовах. Але, як і більшість особливостей Python, else
може привести до більш
елегантного і "пайтонічного" коду.
Ще немає коментарів