'continue' statement is like a 'goto' to the end of loop body.
For example, you want to enumerate all tripes of numbers in range 1..5, but if a number doesn't repeat in triple. First version:
#!/usr/bin/env python3 for i in range(5): for j in range(5): for k in range(5): if i!=j: if j!=k: if i!=k: print (i, j, k)
Not good. Spaghetti code in worst sense. Better:
#!/usr/bin/env python3 for i in range(5): for j in range(5): for k in range(5): if i!=j and j!=k and i!=k: print (i, j, k)
Still not good. Even better:
#!/usr/bin/env python3 for i in range(5): for j in range(5): for k in range(5): if i==j: continue # read it as 'skip loop body' if j==k: continue # read it as 'skip loop body' if i==k: continue # read it as 'skip loop body' print (i, j, k)
Now this is real code from my practice. I parse WET files from commoncrawl DB using warcio. Picking only 'coversion' records with English language.
#!/usr/bin/env python3 from warcio.archiveiterator import ArchiveIterator import sys with open(sys.argv[1], 'rb') as stream: for record in ArchiveIterator(stream): if record.rec_type=='conversion': h=record.rec_headers lang=h['WARC-Identified-Content-Language'] if lang=='eng': print (h)
Isn't this better?
#!/usr/bin/env python3 from warcio.archiveiterator import ArchiveIterator import sys with open(sys.argv[1], 'rb') as stream: for record in ArchiveIterator(stream): if record.rec_type!='conversion': continue h=record.rec_headers lang=h['WARC-Identified-Content-Language'] if lang!='eng': continue print (h)
Many PLs with Algol-derived syntax has the 'continue' statement.
Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.