
On 27/02/2018 22:27, Chris Angelico wrote:
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 statement.
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 ... 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 glance that [(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)] or 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 ... cleaner somehow. Regards Rob Cliffe