On 27/02/2018 22:27, Chris Angelico
Hm, apologies. This is in complete contrast to my previous post,
where I was pretty enthusiastic about Chris's PEP. But I can't
resist sharing these thoughts ...
This is a suggestion that comes up periodically here or on python-dev.
This proposal introduces a way to bind a temporary name to the value
of an expression, which can then be used elsewhere in the current
There was some vague uneasiness at the back of my mind, which I
think I have finally pinned down. Consider Chris's example:
# Using a statement-local name
stuff = [[(f(x) as y), y] for x in range(5)]
I think what bothered me was the asymmetry between the two
uses of the calculated value of f(x). It is not obvious at first
[(f(x) as y), y]
defines a 2-element list where the 2 elements are the same.
Contrast something like (exact syntax bike-sheddable)
stuff = [ (with f(x) as y: [y,y]) for x in range(5)]
stuff = [ (y,y] with f(x) as y) for x in range(5)]
This also has the advantage (if it is? I think probably it is) that
the scope of the temporary variable ("y" here) can be limited to
inside the parentheses of the "with" sub-expression.
And that it is not dependent on Python's evaluation order.
Ir gives the programmer explicit control over the scope, which might
conceivably be an advantage in more complicated expressions.
Sorry if this is re-hashing a suggestion that has been made before,
as it probably is. It just struck me as ... I don't know ...