for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
Genel bir durumda, birden fazla döngü düzeyiniz olduğunda ve break
sizin için çalışmadığında (çünkü mevcut döngüden değil, üst döngülerden birine devam etmek istiyorsanız), aşağıdakilerden birini yapabilirsiniz.
Kaçmak istediğiniz döngüleri bir işleve yeniden düzenleyin
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
Dezavantajı, bu yeni işleve daha önce kapsamda olan bazı değişkenleri aktarmanız gerekebilmesidir. Bunları sadece parametre olarak iletebilir, onları bir nesne üzerinde örnek değişkenler yapabilirsiniz (eğer mantıklıysa, sadece bu fonksiyon için yeni bir nesne yaratabilirsiniz) veya global değişkenler, tekli tonlar, ne olursa olsun (ehm, ehm).
Veya inner
iç içe geçmiş bir işlev olarak tanımlayabilir ve sadece ihtiyaç duyduğu şeyi yakalamasına izin verebilirsiniz (daha yavaş olabilir mi?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
İstisnaları kullanın
Felsefi olarak, gerektiğinde yapısal programlama yapı taşlarından (if, for, while) program akışını kırmak için istisnalar budur.
Bunun avantajı, tek bir kod parçasını birden çok parçaya bölmeniz gerekmemesidir. Bu, Python'da yazarken tasarladığınız bir tür hesaplamaysa iyidir. Bu erken noktada soyutlamalara başlamak sizi yavaşlatabilir.
Bu yaklaşımla ilgili kötü olan şey, yorumlayıcı / derleyici yazarların genellikle istisnaların istisnai olduğunu varsaymaları ve buna göre optimize etmeleridir.
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
Bunun için özel bir istisna sınıfı oluşturun, böylece yanlışlıkla başka bir istisnayı susturma riskine girmezsiniz.
Tamamen başka bir şey
Eminim başka çözümler de vardır.