programowaniePython Backend/Junior programista

Wyjaśnij szczegóły działania pętli oraz operatorów break/continue/else w Pythonie. Jak działa else w pętli?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

W Pythonie można pisać else nie tylko po if, ale także po pętlach for i while. Ciało else jest wykonywane tylko wtedy, gdy pętla zakończyła się "normalnie" — nie przez break. Umożliwia to elegancką realizację, na przykład, wyszukiwania elementu.

Przykład:

for x in range(5): if x == 3: print('break!') break else: print('Pętla zakończona bez breaka') # nie zostanie wykonane
for x in range(5): if x == 10: break else: print('Pętla zakończona bez breaka') # zostanie wykonane

Ta funkcjonalność jest często używana do "wyszukiwania bez sukcesu": jeśli break nie nastąpił, to znaczy, że element nie został znaleziony.

Pytanie z haczykiem.

Czy blok else pętli zawsze jest wykonywany, jeśli pętla się zakończyła? Co jeśli pętla była pusta?

Odpowiedź: Tak, jeśli nie było break, else zawsze zostanie wykonane, nawet jeśli pętla ani razu nie weszła do ciała:

for x in []: print('nic') else: print('else!') # to zostanie wyświetlone

Przykłady rzeczywistych błędów z powodu nieznajomości szczegółów tematu.


Historia

Projekt: Parser dokumentów.

Problem: Szukaliśmy klucza na liście, a po pętli ustalaliśmy flagę "not found" poza else. W rezultacie wykrywanie elementu działało niepoprawnie, jeśli break nie wystąpił.


Historia

Projekt: Generowanie unikalnych tokenów.

Problem: Logika generowania tokena zależała od poprawnego wyjścia przez break, a else błędnie uważano za "przypadek wyjątkowy", chociaż faktycznie działał w 99% uruchomień, co łamało logikę autoryzacji użytkowników.


Historia

Projekt: Skrypt testujący dla sieciowego API.

Problem: Z powodu błędnego zrozumienia else po while używano go do obsługi timeoutu, chociaż pętla kończyła się nie przez break, a timeouty nie były wychwytywane, co prowadziło do "cichych" błędów w testach.