Can this be written more concisely in a functional style
Anton Vredegoor
anton at vredegoor.doge.nl
Tue Nov 18 13:03:12 EST 2003
mis6 at pitt.edu (Michele Simionato) wrote:
>def any(p, seq):
> """Returns true if any element in seq satisfies predicate p."""
> for elt in itertools.ifilter(p, seq):
> return True
> return False
>
>def all(p, seq):
> """Returns true if all elements in seq satisfy predicate p."""
> for elt in itertools.ifilterfalse(p, seq):
> return False
> return True
>
>Since the "else" is unnecessary, it disturbs me, I get confused,
>I don't see why it is used (there is no break in the loop) and the
>code becomes much harder to read, for me. OTOH I am sure 99% of
>people would say "look, it is obvious, if elt is in the output
>of ifilter it will return True, else False (viceversa in the
>second case)". But may brain sees that the "else" is unncessary
>and immediately it is disturbed by th redundance.
>Am I the only one? ;)
Well, don't the multiple returns disturb you? I'd suggest this but
probably it's too clever:
from itertools import islice,ifilter
def any(predicate,seq):
return bool(list(islice(ifilter(predicate,seq),1)))
def test():
xs = 'abc123def456'
def fun(x):
print x
return x == '3'
print any(fun,xs)
if __name__=='__main__':
test()
Anton
More information about the Python-list
mailing list