why any( ) instead of firsttrue( ) ?

danieldelay danieldelay at gmail.com
Tue Jun 8 19:08:57 EDT 2010


Le 09/06/2010 00:24, Ian Kelly a écrit :
> Because it was designed as a replacement for "reduce(lambda x, y: x or
> y, iterable)".  The problem arises when the iterable is empty.  What
> false value should be returned?  If the iterable is a sequence of
> bools, then None doesn't fit.  If the iterable is a sequence of
> non-bool objects, then False doesn't fit.  In the case of reduce, the
> problem is solved by explicitly specifying an initial value to be used
> when the sequence is empty, but I guess GVR didn't feel that was
> appropriate here.
>
> Cheers,
> Ian

Thanks for your reply, it helps me to understand this choice wether I do 
not agree with it.

"False" sounds natural for a function called "any()" which makes a 
boolean calculus

"None" sounds natural for a function called "firsttrue()" which tries to 
retrieve an element.

As the two make sense, I would have chosen the "firsttrue()" which is 
more powerfull...

Perhaps "any()" whas choosen to keep a beautiful symmetry with "all()", 
that I can interprete only as a boolean calculus.

Does GVR prefers beauty to power ?

firsttrue(line.strip() for line in '\n\n \n CHEERS  \n'.split('\n'))

Daniel.



More information about the Python-list mailing list