for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
W ogólnym przypadku, gdy masz wiele poziomów zapętlenia i break
nie działa dla Ciebie (ponieważ chcesz kontynuować jedną z górnych pętli, a nie tę tuż nad bieżącą), możesz wykonać jedną z następujących czynności
Refaktoryzuj pętle, z których chcesz uciec, do funkcji
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
Wadą jest to, że może być konieczne przekazanie tej nowej funkcji pewnych zmiennych, które wcześniej znajdowały się w zakresie. Możesz po prostu przekazać je jako parametry, uczynić z nich zmienne instancji w obiekcie (utwórz nowy obiekt tylko dla tej funkcji, jeśli ma to sens) lub zmienne globalne, pojedyncze elementy, cokolwiek (ehm, ehm).
Lub możesz zdefiniować inner
jako funkcję zagnieżdżoną i pozwolić jej po prostu przechwytywać to, czego potrzebuje (może być wolniejsze?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Użyj wyjątków
Filozoficznie, do tego służą wyjątki, przerywanie przepływu programu przez strukturalne bloki programistyczne (jeśli, na, podczas), gdy jest to konieczne.
Zaletą jest to, że nie musisz dzielić jednego fragmentu kodu na wiele części. Jest to dobre, jeśli jest to jakieś obliczenie, które projektujesz podczas pisania w Pythonie. Wprowadzenie abstrakcji na tak wczesnym etapie może Cię spowolnić.
Wadą tego podejścia jest to, że autorzy interpreterów / kompilatorów zwykle zakładają, że wyjątki są wyjątkowe i odpowiednio je optymalizują.
class ContinueI(Exception):
pass
continue_i = ContinueI()
for i in ...:
try:
for j in ...:
for k in ...:
if something:
raise continue_i
except ContinueI:
continue
Utwórz dla tego specjalną klasę wyjątków, aby nie ryzykować przypadkowego wyciszenia innego wyjątku.
Coś zupełnie innego
Jestem pewien, że istnieją jeszcze inne rozwiązania.