Can this be written more concisely in a functional style
Ben Finney
bignose-hates-spam at and-benfinney-does-too.id.au
Mon Nov 17 19:38:09 EST 2003
On 17 Nov 2003 16:48:36 -0800, MetalOne wrote:
> 1)
> def f(xs):
> for x in xs:
> if test(x): return True
> return False
Makes it obvious that there is a way for the iternation to end early.
> 2)
> return True in map(test,xs)
Strongly implies ("foo in list", "map()") that the entire list will be
iterated. Any other behaviour would be unexpected to the person reading
the code.
> I know that I can do (2), but it operates on the whole list and the
> original may break out early. I want the efficiency of (1), but the
> conciseness of (2).
I think that in seeking to make it more concise, you're also seeking to
make it less obvious. Anything that has the semantics of "loop over the
whole list" in a single statement, isn't going to help people understand
that a common case is for the iteration to end early. Which is probably
a good reason for it not to appear.
If you want to hide the algorithm, do so inside a helper function. Then
you have consision in the places where you're actually using it, and
explicit semantics where the algorithm is implemented.
--
\ "A cynic is a man who, when he smells flowers, looks around for |
`\ a coffin." -- Henry L. Mencken |
_o__) |
Ben Finney <http://bignose.squidly.org/>
More information about the Python-list
mailing list