[Python-ideas] Break the dominance of boolean values in boolean context
Terry Reedy
tjreedy at udel.edu
Thu Sep 15 21:40:02 CEST 2011
On 9/15/2011 8:40 AM, Sven Marnach wrote:
> Terry Reedy schrieb am Mi, 14. Sep 2011, um 22:52:47 -0400:
>> That is what itertool is designed for. I believe
>> chain(dropwhile(...), [default]) will add a default.
>
> ... unless the default is falsy.
Out of context nonsense. In
from itertools import dropwhile
def _not(x): return not x
def first(iterable):
return next(dropwhile(_not, iterable))
replacing 'dropwhile(_not, iterable)' with
'chain(dropwhile(_not,iterable),[default]'
will *always* return default if dropwhile is empty
*and* guarantee that there is a first to be returned
instead of raising StopIteration, which should otherwise be trapped, as
StopIteration should only be passed out by iterators.
Actually, I would probably not bother with chain and instead write
def first(iterable,default):
try:
return next(dropwhile(_not, iterable))
except StopIteration:
return default
--
Terry Jan Reedy
More information about the Python-ideas
mailing list