[Python-Dev] The `for y in [x]` idiom in comprehensions

David Mertz mertz at gnosis.cx
Sat Feb 24 01:07:33 EST 2018


FWIW, the nested loop over a single item is already in the language for 15
years or something. It's not that ugly, certainly not enough to need a new
'let' or 'where' keyword that basically does exactly the same thing with 3
fewer characters.

On Feb 23, 2018 10:04 PM, David Mertz <mertz at gnosis.cx> wrote:


On Feb 23, 2018 9:26 PM, "Steven D'Aprano" <steve at pearwood.info> wrote:

Given a potentially expensive DRY violation like:

    [(function(x), function(x)+1) for x in sequence]

there are at least five ways to solve it.


A 6th way is to wrap the expensive function in @lru_cache() to make it
non-expensive.


    [(a, a+1) for x in sequence for a in [function(x)]]


It's funny to me how many people, even the BDFL, have said this is tricky
to reason about or recognize. I didn't think of it all by myself, but saw
it somewhere years ago. It seemed obvious once I saw it. Since then it's
something I do occasionally in my code without much need for thought.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180223/701e87b3/attachment-0001.html>


More information about the Python-Dev mailing list