Proposed new syntax

Ben Bacarisse ben.usenet at bsb.me.uk
Fri Aug 11 15:49:32 EDT 2017


Steve D'Aprano <steve+python at pearwood.info> writes:

> Every few years, the following syntax comes up for discussion, with some people
> saying it isn't obvious what it would do, and others disagreeing and saying
> that it is obvious. So I thought I'd do an informal survey.
>
> What would you expect this syntax to return?
>
> [x + 1 for x in (0, 1, 2, 999, 3, 4) while x < 5]
>
> For comparison, what would you expect this to return? (Without actually trying
> it, thank you.)
>
> [x + 1 for x in (0, 1, 2, 999, 3, 4) if x < 5]

These are not unclear (I think I'd guess that same as most people) but
adding a new while clause, and the existing if clause, both seem to be
rather narrow solutions.  The general solution would be to filter the
iterable (if that's the right term for it).  In Haskell:

  [x+1 | x <- takeWhile (<5) [0, 1, 2, 999, 3, 4]]
  [x+1 | x <- filter    (<5) [0, 1, 2, 999, 3, 4]]

I am sure you can already do this in Python but presumably it's not
convenient or there would be little incentive to build "takeWhile" into
the language.

<snip>
-- 
Ben.



More information about the Python-list mailing list