On 29.07.20 13:33, Jonathan Fine wrote:
Thank you all, particularly Guido, for your contributions. Having some
examples will help support the exploration of this idea.
Here's a baby example - searching in a nested loop. Suppose we're
looking for the word 'apple' in a collection of books. Once we've
found it, we stop.
for book in books:
for page in book:
if 'apple' in page:
break
if break:
break
This can be realized already with `else: continue`:
for book in books:
for page in book:
if 'apple' in page:
break
else:
continue
break
However it looks more like this should be a function and just return
when there is a match:
for book in books:
for page in book:
if 'apple' in page:
return True
Or flatten the loop with itertools:
for page in it.chain.from_iterable(books):
if 'apple' in page:
break
This can also be combined with functions `any` or `next` to check if
there's a match or to get the actual page.
However, suppose we say that we only look at the first 5000 or so
words in each book. (We suppose a page is a list of words.)
This leads to the following code.
for book in books:
word_count = 0
for page in book:
word_count += len(page)
if word in page:
break
if word_count >= 5000:
break found
if break found:
break
This also could be a function that just returns on a match. Or you could
use `itertools.islice` to limit the number of words. I don't see a
reason for double break here.
At this time, I'd like us to focus on examples of existing code, and
semantics that might be helpful. I think once we have this, the
discussion of syntax will be easier.
By the way, the word_count example is as I typed it, but it has a
typo. Did you spot it when you read it? (I only noticed it when
re-reading my message.)
Finally, thank you for your contributions. More examples please.
I think the need for two (or more) distinct `break` reasons or the same
`break` reason at multiple different locations in a loop is pretty rare.
Are there any counter examples? Otherwise such cases can be handled
already today and there's no need for additional syntax (apart from the
"else" ambiguity).
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/python-ideas@python.org/message/5OGVHMKXR5K5FACDTKCO2KHTOPYVF66I/
Code of Conduct: http://python.org/psf/codeofconduct/