पायथन में "जारी रखें" कथन का उदाहरण उपयोग


177

परिभाषा के continueकथन है:

continueबयान पाश की अगले चरण के साथ जारी है।

मुझे कोड का कोई अच्छा उदाहरण नहीं मिल रहा है।

क्या कोई कुछ सरल मामलों का सुझाव दे सकता है जहां continueआवश्यक है?

जवाबों:


218

यहाँ एक सरल उदाहरण दिया गया है:

for letter in 'Django':    
    if letter == 'D':
        continue
    print("Current Letter: " + letter)

आउटपुट होगा:

Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o

यह लूप के अगले पुनरावृत्ति के लिए जारी है।


1
मैं पिछले तीन या चार दिनों से सोच रहा था, मुझे कभी 'कंटिन्यू' स्टेटमेंट की जरूरत क्यों पड़ेगी और फिर मैं इस पोस्ट में दौड़ता हूं, जो मुझे कुछ क्यूए के साथ मदद करता है - बहुत धन्यवाद!
फ्रेडी

3
यहाँ पर, जब हम अजगर स्क्रिप्ट (क्रोन जॉब के लिए) लिखते हैं और बड़े मूल्यों पर पुनरावृत्ति करते हैं और कुछ अपवाद होते हैं, तो क्रॉन जॉब बंद हो जाएगा और आप केवल यह जान पाएंगे कि अगले दिन, यह वास्तव में उन मामलों में बहुत मदद करता है, हाँ हम अपवाद पर मेल सुविधा भेज सकते हैं, लेकिन फिर भी निष्पादन रोक दिया जाएगा।
स्नेहल परमार

2
यह दिखाता है कि क्या continueकरता है, लेकिन यह बहुत उपयोगी नहीं है, जब आप कर सकते थेif letter != 'D': print 'Current Letter:', letter
क्रिस_ड्रैड

मैंने प्रार्थना / रिम r, या Fast / remove s चुना होगा।
बेंजामिन क्राउज़ियर

102

मैं लूप में जारी रखना पसंद करता हूं, जहां "व्यापार से नीचे" होने से पहले बहुत सारी प्रतियोगिताओं को पूरा करना है। इसलिए इस तरह कोड के बजाय:

for x, y in zip(a, b):
    if x > y:
        z = calculate_z(x, y)
        if y - z < x:
            y = min(y, z)
            if x ** 2 - y ** 2 > 0:
                lots()
                of()
                code()
                here()

मुझे इस तरह का कोड मिलता है:

for x, y in zip(a, b):
    if x <= y:
        continue
    z = calculate_z(x, y)
    if y - z >= x:
        continue
    y = min(y, z)
    if x ** 2 - y ** 2 <= 0:
        continue
    lots()
    of()
    code()
    here()

इस तरह से करने से मैं बहुत गहराई से नेस्टेड कोड से बचता हूं। इसके अलावा, पहले सबसे अधिक बार होने वाले मामलों को समाप्त करके लूप को अनुकूलित करना आसान है, ताकि मुझे केवल अन्य शोस्टॉपर न होने पर अनंतिम लेकिन महत्वपूर्ण मामलों (जैसे विभाजक 0) से निपटना पड़े।


2
इसलिए "जारी" का उपयोग ज्यादातर इंडेंटेशन को कम करके पठनीयता के लिए किया जाता है। मैं सोच रहा हूं कि क्या "जारी" किसी भी अभिव्यंजक शक्ति को जोड़ता है।
JohnG

14
continueइस फैशन में उपयोग करना समान है GOTO। हालांकि, यह उपयोग करने का सही तरीका है GOTO
डॉटंचोहेन

1
@ जॉन मुझे विश्वास नहीं है कि जारी रखने (या उस मामले के लिए विराम) का कोई उपयोग है, जो इसके बिना पुन: पेश नहीं किया जा सकता है, हालांकि यह नहीं होना रन-टाइम में महंगा हो सकता है।
शूल

18

आमतौर पर वह स्थिति जहां जारी रहना आवश्यक / उपयोगी होता है, जब आप शेष कोड को लूप में छोड़ना चाहते हैं और पुनरावृत्ति जारी रखना चाहते हैं।

मैं वास्तव में विश्वास नहीं करता कि यह आवश्यक है, क्योंकि आप हमेशा उपयोग कर सकते हैं यदि कथन एक ही तर्क प्रदान करते हैं, लेकिन यह कोड की पठनीयता बढ़ाने के लिए उपयोगी हो सकता है।


23
ध्यान दें कि उपयोग करने के if <condition>: continueबजाय if not <condition>: ...इंडेंटेशन के एक स्तर से बचा जाता है जो अन्यथा आवश्यक होगा यदि इसके बिना लिखा गया था।
Dan D.

1
मैं JohnG के साथ एक समान qn पोस्ट करने वाला था, लेकिन फिर पाया कि उसने पहले ही पूछ लिया था कि मैं क्या जानना चाहता हूं। यहां सभी प्रतिक्रियाओं को पढ़ने से मदद मिली है, लेकिन मुझे अभी भी एक चीज के बारे में सुनिश्चित होना चाहिए - तो क्या यह है कि जब भी हम एक continueबयान का उपयोग करते हैं, हम अनिवार्य रूप से एक सशर्त परीक्षण खंड से बाहर कूद रहे हैं और लूप के पुनरावृत्ति को आगे बढ़ने की अनुमति देते हैं अगले पुनरावृत्ति के लिए? यह मेरे लिए स्पष्ट नहीं है कि यह उपयोग करने से बेहतर कैसे होगा else। क्या यह केवल बेहतर पठनीयता और रन-टाइम प्रदर्शन के बारे में है?
AKKO

"मुझे नहीं लगता कि यह आवश्यक है" ... ठीक है, अजगर रचनाकारों ने अन्यथा सोचा।
जीन फ़्राँस्वा Fabre

12
import random  

for i in range(20):  
    x = random.randint(-5,5)  
    if x == 0: continue  
    print 1/x  

जारी रखना एक अत्यंत महत्वपूर्ण नियंत्रण कथन है। उपरोक्त कोड एक विशिष्ट एप्लिकेशन को इंगित करता है, जहां शून्य से एक विभाजन के परिणाम से बचा जा सकता है। जब मैं प्रोग्राम से आउटपुट को स्टोर करने की आवश्यकता होती है, तो मैं अक्सर इसका उपयोग करता हूं, लेकिन अगर प्रोग्राम क्रैश हो गया है तो आउटपुट को स्टोर नहीं करना चाहता। ध्यान दें, उपरोक्त उदाहरण का परीक्षण करने के लिए, अंतिम विवरण को प्रिंट 1 / फ्लोट (x) से बदलें, या जब भी कोई अंश हो, तो आपको शून्य मिलेगा, क्योंकि रैंडिंट एक पूर्णांक देता है। मैंने इसे स्पष्टता के लिए छोड़ दिया।


10

कुछ लोगों ने पठनीयता के बारे में टिप्पणी करते हुए कहा है, "ओह यह पठनीयता में मदद नहीं करता है कि ज्यादा, कौन परवाह करता है?"

मान लें कि आपको मुख्य कोड से पहले एक चेक की आवश्यकता है:

if precondition_fails(message): continue

''' main code here '''

ध्यान दें कि आप इसके बाद कर सकते हैं उस कोड को वैसे भी बदलने के बिना मुख्य कोड लिखे के । यदि आप कोड को अलग करते हैं, तो केवल "जारी" के साथ जोड़ी गई रेखा को हाइलाइट किया जाएगा क्योंकि मुख्य कोड में कोई रिक्ति परिवर्तन नहीं हैं।

कल्पना कीजिए कि यदि आपको उत्पादन कोड का एक ब्रेकफ़िक्स करना है, जो जारी रखने के साथ बस एक पंक्ति जोड़ रहा है। यह देखना आसान है कि जब आप कोड की समीक्षा करते हैं तो यह एकमात्र परिवर्तन होता है। यदि आप मुख्य कोड को if / in में लपेटना शुरू करते हैं, तो अंतर नए इंडेंट कोड को उजागर करेगा, जब तक कि आप रिक्ति परिवर्तन को अनदेखा नहीं करते हैं, जो विशेष रूप से पायथन में खतरनाक है। मुझे लगता है कि जब तक आप उस स्थिति में नहीं होते जब आपको शॉर्ट नोटिस पर कोड रोल करना पड़ता है, तो आप पूरी तरह से इसकी सराहना नहीं कर सकते।


5
def filter_out_colors(elements):
  colors = ['red', 'green']
  result = []
  for element in elements:
    if element in colors:
       continue # skip the element
    # You can do whatever here
    result.append(element)
  return result

  >>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
  ['lemon', 'orange', 'pear']

4
लेकिन continueबयान यहाँ क्या जोड़ता है? इसका उपयोग करके इसे समाप्त किया जा सकता है element not in colors, और कोड केवल पठनीय होगा।
इखुमोरो

4

मान लें कि हम उन सभी नंबरों को प्रिंट करना चाहते हैं जो 3 और 5 के गुणक नहीं हैं

for x in range(0, 101):
    if x % 3 ==0 or x % 5 == 0:
        continue
        #no more code is executed, we go to the next number 
    print x

आप, साथ ही इस्तेमाल कर सकते हैं if x %3 == 0 or x % 5 == 0:, pass, else:,print x
वाइल्डकार्ड

सही तरीका या तो उपयोग जारी है या ऑपरेटर नहीं है। अनावश्यक रूप से पास का उपयोग क्यों करें?
ytpillai

मुझे आपका तरीका बेहतर लगता है (इसलिए upvote)। मैं इस पृष्ठ पर यह जानने की कोशिश कर रहा था कि क्या कभी उपयोग करने की आवश्यकता है continue। मेरा निष्कर्ष यह है कि कभी कोई आवश्यकता नहीं है , लेकिन कुछ मामलों में (जैसे यह) कोड का उपयोग करने में अधिक पठनीय है continue। यह बहुत अच्छा उदाहरण है।
वाइल्डकार्ड

3

यह बिल्कुल आवश्यक नहीं है क्योंकि यह IFs के साथ किया जा सकता है लेकिन यह अधिक पठनीय है और रन टाइम में कम खर्चीला भी है।

यदि डेटा कुछ आवश्यकताओं को पूरा नहीं करता है, तो मैं इसे एक लूप में पुनरावृत्ति को छोड़ने के लिए उपयोग करता हूं:

# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]

for time in commit_times:
    hour = time[0]
    minutes = time[1]

    # If the hour is not between 0 and 24
    # and the minutes not between 0 and 59 then we know something is wrong.
    # Then we don't want to use this value,
    # we skip directly to the next iteration in the loop.
    if not (0 <= hour <= 24 and 0 <= minutes <= 59):
        continue

    # From here you know the time format in the tuples is reliable.
    # Apply some logic based on time.
    print("Someone commited at {h}:{m}".format(h=hour, m=minutes))

आउटपुट:

Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45

जैसा कि आप देख सकते हैं, गलत मूल्य continueबयान के बाद नहीं बना था ।


ifकेवल वही कर सकता continueहै यदि सभी कोड एक ब्लॉक में समाहित हैं। ब्लॉक के continueबाहर भी है कि skips कोड if
21

घंटा 24-समावेशी क्यों है लेकिन मिनट 60-अनन्य है?
पैट्रिक आर्टनर

कोई विशेष कारण नहीं, सिर्फ एक उदाहरण, संपादित करने के लिए स्वतंत्र महसूस करें
बैस्टियन

1

उदाहरण के लिए यदि आप एक चर के मूल्य के आधार पर विभिन्न चीजें करना चाहते हैं:

my_var = 1
for items in range(0,100):
    if my_var < 10:
        continue
    elif my_var == 10:
        print("hit")
    elif my_var > 10:
        print("passed")
    my_var = my_var + 1

ऊपर दिए गए उदाहरण में अगर मैं breakदुभाषिया का उपयोग करता हूं तो लूप को छोड़ देगा। लेकिन इसके साथ continueकेवल if-elif स्टेटमेंट्स को छोड़ देता है और सीधे लूप के अगले आइटम पर जाता है।


3
आपका उदाहरण कभी भी कुछ भी नहीं छापेगा, क्योंकि पहली शर्त हमेशा सच होती है। के लिए एक प्रारंभिक मूल्य संभालने my_varकी 0
Dan D.

मैंने बस एक पुराने कोड का उदाहरण दिया। Var का मूल मान 0 नहीं है और सुविधा के लिए बढ़ते हिस्से को जोड़ा गया क्योंकि इसकी मूल जगह नहीं थी। चूंकि यह एक उदाहरण है और इसका मूल्य वास्तव में मायने नहीं रखता है क्योंकि मुझे लगता है कि यह ठीक है।
jonathan.hepp

9
यह ठीक नहीं है। यह उपयोग करने के लिए एक अच्छा विज्ञापन नहीं है continue
जॉन मैकिन

3
और पहले elifएक होना चाहिए if। कोड केवल वह स्वरूप नहीं देता है जो आप जानते हैं कि आप क्या कर रहे हैं।
जॉन मैकिन

यह एक बुरा उदाहरण है
पैट्रिक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.