Wielu programistów Pythona prawdopodobnie nie zdaje sobie sprawy, że składnia whilepętli i forpętli zawiera opcjonalną else:klauzulę:
for val in iterable:
do_something(val)
else:
clean_up()
Treść elseklauzuli 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ą returnlub breakpomijanie elseklauzuli; wyjście po continuewykonaniu 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ść elseobarczam 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 elsesł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ą tryoświadczenia else:(którą również muszę sprawdzić) i aby nie dodawać do listy Zastrzeżone słowa Pythona. Być może powody wyboru elsewyjaś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ę elsez 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. elseJest wykonywana tylko wtedy, gdy nic nie znaleziono.