[Python-ideas] Loop labels

Steven D'Aprano steve at pearwood.info
Fri Mar 9 10:18:42 CET 2012


On Fri, Mar 09, 2012 at 07:06:47AM +0200, David Townshend wrote:
> The biggest problem is not the new syntax.  It's the new type of object
> that would be needed, Label, which lies in some magical place half way
> between a name and a keyword.

Labels are neither names nor keywords nor objects. They would be 
instructions to the compiler, nothing more.

The idea of labelled break/continue is not a new invention. Before 
criticising it (or for that matter, praising it), we should see how it 
works in other languages.

Java has labelled loops:
http://www.cs.umd.edu/~clin/MoreJava/ControlFlow/break.html

So does Javascript:
http://www.tutorialspoint.com/javascript/javascript_loop_control.htm

And Groovy:
http://docs.codehaus.org/display/GROOVY/JN2535-Control



> What would be the result of the following code?
> 
> loops = []
> for i in range(4) as label:
>     print(type(label), dir(label))

NameError, because there is no name "label".

>     loops.append(label)

Again, NameError.

> for label in loops as newlabel:
>     break label

SyntaxError, because the "label" loop is not enclosing the break.


For what it's worth, I used to be against this idea as adding 
unnecessary complexity, until a year or so ago when I came across a 
use-case which was naturally written as nested loops with labelled 
breaks. Now I'm sold on the idea. I ended up re-writing the code to use 
functions, but it really wasn't natural. It felt forced.

I just wish I could remember what the algorithm was... :(


-- 
Steven



More information about the Python-ideas mailing list