[Python-ideas] Updating PEP 315: do-while loops

Larry Hastings larry at hastings.org
Sun Apr 26 04:35:15 CEST 2009


Raymond Hettinger wrote:
> 1) One approach uses the standard do-while name but keeps usual python 
> style formatting by putting the condition at the top instead of the 
> bottom where it is in C and Java: 

I don't like the condition-at-the-top variants, with or without an 
ellipsis.  (At first glance anyway.)

> I haven't found any condition-at-the-end syntax that FeelsRight(tm).
>
> Probably everyone has an opinion on these, but I don't any think those 
> could be called bike-shedding.  The spelling does matter and hopefully 
> the cleanest solution can be found.

I couldn't quite parse that, but I sure hope it meant "I'm up for yet 
another round of discussion".

I propose we allow an "if" suffix to "break" and "continue".  So I'd 
spell your loop this way:

    do:
        j = _int(random() * n)
        continue if j in selected

This would require there be no implied "while True" for a "do" block.  
If you hit the end of the "do" block, without following a continue, 
you'd just leave the block.  So this program would be legal:

    do:
      print("wtf?")
    print("well, that was pointless")

It would print two strings then exit.  It would *not* loop.  A little 
unexpected I guess.

On the other hand this form gives a pleasing alternate spelling to 
"while True":

    do:
        continue

It also provides a dandy spelling for early-exit programming, without 
nesting your ifs, or early return, or throwing an exception, or using 
gotos which thankfully we don't have:

    def user_typed_1_then_2():
        do:
           print("enter 1, then 2")
           i = input()
           break if i != '1'
           i = input()
           break if i != '2'
           return True
        print("why do you mistreat me so? it was a simple request!")
        return False

Maybe it's just me, but I think that spelling and those semantics are 
charmingly Pythonic.

HTH,


/larry/



More information about the Python-ideas mailing list