Le 15/01/2012 03:01, Steven D'Aprano a écrit :
> def any2(iterable, pred=bool):
> """Like any(pred(x) for x in iterable), returning False if it is false,
> otherwise obj, the first witness that it is true.
> """
> for obj in iterable:
> if pred(obj):
> return obj
> # I look forward to the bike-shedding about returning None
> # vs returning False;)
> return False
Hi,
If the point is to get some value that matches a predicate, how about this?
next(value for value in iterable if predicate(value))
If a "no value" marker is desired instead of StopIteration:
next((value for value in iterable if predicate(value)), None)
But yes, assignment-expression is still required to avoid the while
True/if/break dance.
Regards,
--
Simon Sapin