Wielu programistów Pythona prawdopodobnie nie zdaje sobie sprawy, że składnia while
pętli i for
pętli zawiera opcjonalną else:
klauzulę:
for val in iterable:
do_something(val)
else:
clean_up()
Treść else
klauzuli jest dobrym miejscem dla niektórych rodzajów działań czyszczących i jest wykonywana przy normalnym zakończeniu pętli: tj. Wychodzenie z pętli za pomocą return
lub break
pomijanie else
klauzuli; wyjście po continue
wykonaniu go. Wiem, że to tylko dlatego, że po prostu spojrzał go (jeszcze raz), bo nie pamiętam kiedyelse
klauzula jest wykonywany.
Zawsze? Na „awarii” pętli, jak sama nazwa wskazuje? Na regularne wypowiedzenie? Nawet jeśli pętla zostanie zakończona za pomocą return
? Nigdy nie mogę być całkowicie pewien bez szukania.
Winę za utrzymującą się niepewność else
obarczam wyborem słowa kluczowego: dla tej semantyki uważam to za niezwykle niememoniczne. Moje pytanie nie brzmi „dlaczego to słowo kluczowe jest używane do tego celu” (które prawdopodobnie zagłosowałbym za jego zamknięciem, chociaż dopiero po przeczytaniu odpowiedzi i komentarzy), ale jak mogę myśleć o tym else
słowie kluczowym, aby jego semantyka miała sens, i ja pamiętasz to?
Jestem pewien, że odbyło się sporo dyskusji na ten temat i mogę sobie wyobrazić, że wybór został dokonany w celu zachowania spójności z klauzulą try
oświadczenia else:
(którą również muszę sprawdzić) i aby nie dodawać do listy Zastrzeżone słowa Pythona. Być może powody wyboru else
wyjaśnią jego funkcję i sprawią, że będzie ona bardziej niezapomniana, ale chcę połączyć nazwę z funkcją, a nie po wyjaśnieniach historycznych per se.
Odpowiedzi na to pytanie , które moje pytanie zostało na krótko zamknięte jako duplikat, zawiera wiele interesujących historii. Moje pytanie ma inne znaczenie (jak połączyć konkretną semantykę else
z wyborem słowa kluczowego), ale uważam, że powinien być gdzieś link do tego pytania.
else
środki w zasadzie „jeśli warunek nie kontynuacja”. W tradycyjnej pętli for warunkiem kontynuacji jest zazwyczaj i < 42
, w którym to przypadku można wyświetlić tę część jakoif i < 42; execute the loop body; else; do that other thing
break
. Kanoniczny przypadek użycia występuje wtedy, gdy pętla szuka czegoś i pęka, gdy go znajdzie. else
Jest wykonywana tylko wtedy, gdy nic nie znaleziono.