for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
एक सामान्य मामले में, जब आपके पास लूपिंग के कई स्तर होते हैं और break
आपके लिए काम नहीं करता है (क्योंकि आप ऊपरी छोरों में से एक को जारी रखना चाहते हैं, न कि एक के ऊपर एक सही), तो आप निम्न में से एक कर सकते हैं
फ़ंक्शन से बचने के लिए इच्छित लूप को रिफलेक्टर करें
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
नुकसान यह है कि आपको उस नए फ़ंक्शन को कुछ चर पास करने की आवश्यकता हो सकती है, जो पहले दायरे में थे। आप या तो उन्हें केवल मापदंडों के रूप में पास कर सकते हैं, उन्हें ऑब्जेक्ट पर उदाहरण चर बना सकते हैं (इस फ़ंक्शन के लिए एक नया ऑब्जेक्ट बनाएं, अगर यह समझ में आता है), या वैश्विक चर, एकल, जो कुछ भी (एहम, एहम)।
या आप inner
एक नेस्टेड फ़ंक्शन के रूप में परिभाषित कर सकते हैं और इसे बस उस पर कब्जा कर सकते हैं जो इसकी आवश्यकता है (धीमी हो सकती है?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
अपवादों का उपयोग करें
दार्शनिक रूप से, यह वह है, जब आवश्यक हो, संरचित प्रोग्रामिंग बिल्डिंग ब्लॉकों (यदि, के लिए, जबकि) के माध्यम से कार्यक्रम के प्रवाह को तोड़ दिया जाता है।
लाभ यह है कि आपको कोड के एक टुकड़े को कई भागों में नहीं तोड़ना है। यह अच्छा है अगर यह किसी प्रकार की संगणना है जिसे आप पायथन में लिखते समय डिजाइन कर रहे हैं। इस प्रारंभिक बिंदु पर अमूर्तता का परिचय आपको धीमा कर सकता है।
इस दृष्टिकोण के साथ बुरी बात यह है कि दुभाषिया / संकलक लेखक आमतौर पर यह मानते हैं कि अपवाद असाधारण हैं और तदनुसार उनके लिए अनुकूलन करते हैं।
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
इसके लिए एक विशेष अपवाद वर्ग बनाएं, ताकि आप गलती से कुछ अन्य अपवादों को चुप कराने का जोखिम न उठाएं।
पूरी तरह से कुछ और
मुझे यकीन है कि अभी भी अन्य समाधान हैं।