Definicja tego continue
jest stwierdzenie:
continue
Oświadczenie kontynuuje następnej iteracji pętli.
Nie mogę znaleźć żadnych dobrych przykładów kodu.
Czy ktoś mógłby zasugerować kilka prostych przypadków, w których continue
jest to konieczne?
Oto prosty przykład:
for letter in 'Django':
if letter == 'D':
continue
print("Current Letter: " + letter)
Wynik będzie:
Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o
Kontynuuje do następnej iteracji pętli.
continue
robi, ale nie jest zbyt przydatne, kiedy można to zrobićif letter != 'D': print 'Current Letter:', letter
Lubię używać kontynuacji w pętlach, w których jest wiele wymagań, które należy spełnić, zanim przejdziesz do rzeczy. Więc zamiast takiego kodu:
Otrzymuję taki kod:
Robiąc to w ten sposób, unikam bardzo głęboko zagnieżdżonego kodu. Ponadto łatwo jest zoptymalizować pętlę, eliminując najpierw najczęściej występujące przypadki, tak że mam do czynienia tylko z rzadkimi, ale ważnymi przypadkami (np. Dzielnik wynosi 0), gdy nie ma innego showstoppera.
źródło
continue
w ten sposób jest podobne do używaniaGOTO
. Jest to jednak właściwy sposób użyciaGOTO
.Zazwyczaj sytuacja, w której continue jest konieczne / przydatne, ma miejsce, gdy chcesz pominąć pozostały kod w pętli i kontynuować iterację.
Naprawdę nie uważam, że jest to konieczne, ponieważ zawsze można użyć instrukcji if, aby zapewnić tę samą logikę, ale może to być przydatne, aby zwiększyć czytelność kodu.
źródło
if <condition>: continue
raczej niżif not <condition>: ...
pozwala uniknąć poziomu wcięcia, który byłby potrzebny, gdyby został napisany bez niego.continue
instrukcji, zasadniczo wyskakujemy z sekcji testowania warunkowego i pozwalamy, aby iteracja pętli była kontynuowana do następnej iteracji? Nie jest dla mnie oczywiste, jak byłoby to lepsze niż używanieelse
. Czy chodzi tylko o lepszą czytelność i wydajność w czasie wykonywania?Kontynuuj to niezwykle ważne oświadczenie kontrolne. Powyższy kod wskazuje na typowe zastosowanie, w którym można uniknąć wyniku dzielenia przez zero. Używam go często, gdy muszę przechowywać dane wyjściowe z programów, ale nie chcę przechowywać danych wyjściowych, jeśli program się zawiesił. Uwaga, aby przetestować powyższy przykład, zamień ostatnią instrukcję na print 1 / float (x), w przeciwnym razie otrzymasz zera za każdym razem, gdy występuje ułamek, ponieważ randint zwraca liczbę całkowitą. Pominąłem to dla jasności.
źródło
Niektórzy ludzie komentowali czytelność, mówiąc: „Och, to wcale nie poprawia czytelności, kogo to obchodzi?”
Załóżmy, że potrzebujesz czeku przed głównym kodem:
Pamiętaj, że możesz to zrobić później głównego kodu bez zmiany tego kodu w żaden sposób. Jeśli porównasz kod, tylko dodana linia z "kontynuuj" będzie podświetlona, ponieważ nie ma zmian odstępów w głównym kodzie.
Wyobraź sobie, że musisz zrobić breakfix kodu produkcyjnego, który okazuje się po prostu dodaniem linii z kontynuacją. Łatwo zauważyć, że to jedyna zmiana podczas przeglądania kodu. Jeśli zaczniesz zawijać główny kod w if / else, diff podświetli nowo wcięty kod, chyba że zignorujesz zmiany odstępów, co jest niebezpieczne szczególnie w Pythonie. Myślę, że jeśli nie byłeś w sytuacji, w której musisz wdrożyć kod w krótkim czasie, możesz nie w pełni to docenić.
źródło
źródło
continue
oświadczenie ? Można go wyeliminować za pomocą , a kod byłby równie czytelny.element not in colors
Powiedzmy, że chcemy wypisać wszystkie liczby, które nie są wielokrotnościami 3 i 5
źródło
if x %3 == 0 or x % 5 == 0:
,pass
,else:
,print x
continue
. Mój wniosek jest taki, że nigdy nie ma takiej potrzeby , ale w niektórych przypadkach (takich jak ten) kod jest bardziej czytelny przy użyciucontinue
. To bardzo dobry przykład.Nie jest to absolutnie konieczne, ponieważ można to zrobić za pomocą IF, ale jest bardziej czytelne i tańsze w czasie wykonywania.
Używam go, aby pominąć iterację w pętli, jeśli dane nie spełniają pewnych wymagań:
Wynik:
Jak widać, zła wartość nie pojawiła się po
continue
instrukcji.źródło
if
może zrobić tylko to, cocontinue
robi, jeśli cały kod jest zawarty w bloku.continue
pomija kod, który jest nawet pozaif
blokiem.Na przykład, jeśli chcesz robić różne rzeczy w zależności od wartości zmiennej:
W powyższym przykładzie, jeśli użyję
break
interpretera, pominie pętlę. Ale zcontinue
nim tylko pomija instrukcje if-elif i przechodzi bezpośrednio do następnego elementu pętli.źródło
my_var
z0
.continue
.elif
powinien być plikif
. Kod po prostu nie daje wrażenia, że wiesz, co robisz.continue
po prostu pomija resztę kodu w pętli do następnej iteracjiźródło