Забутий 'else' в Python циклах

2 хв. читання

В цій статті ми розглянемо конструкцію 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 може привести до більш елегантного і "пайтонічного" коду.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.6K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація