Proposed new syntax
Ben Finney
ben+python at benfinney.id.au
Thu Aug 10 18:49:39 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]
I agree that the syntax is confusing.
The comprehension encourages thinking in sets: an operation that takes a
collection as input, and emits a different collection, through one
conceptual operation.
Adding ‘while’ in there encourages thinking not in terms of a single
set-based operation, but an iteration of separate operations. That
confuses the model, and I no longer have a coherent model about which to
reason what the syntax might mean.
> 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]
Though ‘for’ is used elsewhere in Python to mean iteration, ‘for’ also
has strong connotation in mathematics for set-based operations (“the
result is foo for all bar, if baz”). So the same confusion doesn't
occur: this is a comprehension which is about set-based thinking, which
is supported by all the semantic connotations of the syntax.
So I think ‘while’ should not be added to the syntax of comprehension
expressions. I agree with those who think it is not obvious what it
would mean.
--
\ “I love to go down to the schoolyard and watch all the little |
`\ children jump up and down and run around yelling and screaming. |
_o__) They don't know I'm only using blanks.” —Emo Philips |
Ben Finney
More information about the Python-list
mailing list