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.