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/

Reply via email to