[Python-ideas] if condition: break idiom
Leif Walsh
leif.walsh at gmail.com
Sun Sep 21 05:53:58 CEST 2008
On Sat, Sep 20, 2008 at 11:41 PM, Carl Johnson <carl at carlsensei.com> wrote:
> def while(x):
> if x > 10:
> raise Break
> else:
> return x
>
> [while(x) for x in range(20)] #produces [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>
> Right now, you can do something this with list(generator expression) by
> raising StopIteration, but it is considered a hack, and it doesn't work with
> list comprehensions.
I imagine what you are thinking of is:
"""
def While(x):
if x > 10:
raise StopIteration
else:
return x
list(While(x) for x in range(20))
"""
This doesn't seem too horrific to me, and certainly doesn't merit
adding Break and Continue as Exception-like objects. I feel this
would just make it unbearably hard for beginners moving in from <every
other language that has looping block constructs and uses break and
continue as statements>.
An alternate construct could be something like:
"""
def While(x):
if x > 10:
return None
else:
return x
[w for w in (While(x) for x in range(20)) if w is not None]
"""
Of course, this looks silly in this example, but in a context where
While were to do something nontrivial, I think it would be suitable.
--
Cheers,
Leif
More information about the Python-ideas
mailing list