[Python-ideas] Break multiple loop levels
Terry Reedy
tjreedy at udel.edu
Sat May 11 18:57:07 EDT 2019
On 5/11/2019 1:20 PM, haael wrote:
>
> Python allows for breaking out from a loop through 'break' and
> 'continue' keywords. It would be nice if it was possible to break many
> loop levels using one command.
>
> I propose two constructions for that:
>
> break
> break break
> break break break
> ...
>
> continue
> break continue
> break break continue
> ...
>
> And so on.
>
> Example:
>
> for i in range(10):
> for j in range(10):
> if i == 2 and j == 3:
> break break
>
> for i in range(10):
> for j in range(10):
> if i == 2 and j == 3:
> break continue
> if i == 7:
> break break
> Breaking out from many loops at once is a common practice, currently
> implemented through boolean testing and exceptions.
Python exceptions generalize both 'return' and 'break' as methods for
escaping nested contexts and are intended for generalized flow control.
> This proposal would make it cleaner.
I actually think that the general method is 'cleaner', be separating
'leave here' and 'arrive here'. This proposal would mean typing fewer
words in the special case where there are nested loops within one function.
The cost is a) more syntax to learn and b) tightly tying together the
two loops more tightly than might be necessary, and thereby inhibiting
re-factoring. In the examples above, where the loops are inherently
tied together, the two loops can, as noted by others, be reduced to one.
If they are not inherently tied together, one might want to reduce the
inner loop to a comprehension or wrap it in a new function so it can
also be used elsewhere. If the inner loop raises, wrapping or
unwrapping it, as needed for reusability or efficiency, does not affect
the logic.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list