[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

AltStyle によって変換されたページ (->オリジナル) /