Hello Chris and Rob,

did you compare your proposal tothe subject called "[Python-ideas] Temporary variables in comprehensions" on this month list ?

If you don't want to go through all the mails, I tried to summarize the ideas in this mail : https://mail.python.org/

In a nutshell one of the proposed syntax was

stuff = [(y, y) where y = f(x) for x in range(5)]

Or with your choice of keyword,

stuff = [(y, y) with y = f(x) for x in range(5)]

Your proposal uses the *reverse* syntax :

stuff = [(y, y) with f(x) as y for x in range (5)]

Your syntax was already proposed in 2008 and you can see in the response to my mail (https://mail.python.org/

The first example with the "where y = f(x)" can already be compiled on a CPython branch called "where-expr" on https://github.com/

You can see all the conversation on subject "Tempory variables in comprehensions" on https://mail.python.org/

I wish I could write a pep to summarize all the discussions (including yours, my summary, including real world examples, including pro's and con's), or should I do a gist on GitHub so that we can talk in a more "forum like" manner where people can edit their answers and modify the document ? This mailing is driving me a bit crazy.

As Rob pointed out, your syntax "(f(x) as y, y)" is really assymmetric and "(y, y) with f(x) as y" or "(y, y) with y = f(x)" is probably prefered. Moreover I agree with you the choice of "with" keyword could be confused with the "with f(x) as x:" statement in context management, so maybe "with x = f(x)" would cleary makes it different ? Or using a new keyword like "where y = f(x)", "let y = f(x)" or probably better "given y = f(x)", "given" isn't used in current librairies like numpy.where or sql alchemy "where".

In the conversation, a lot of people wanted real world examples where it's obvious the new syntax is better.

Cheers,

Robert