[Python-Dev] Informal educator feedback on PEP 572 (was Re: 2018 Python Language Summit coverage, last part) (original) (raw)

Chris Barker - NOAA Federal chris.barker at noaa.gov
Fri Jun 29 19:49:41 EDT 2018


On Jun 28, 2018, at 8:21 PM, Tim Peters <tim.peters at gmail.com> wrote:

Seems it’s all been said, and Tim’s latest response made an excellent case for consistency.

But:

Regardless of how assignment expressions work in listcomps and genexps, this example (which uses neither) will rebind the containing block's x:

[x := 1]

This reinforces my point that it’s not just about comprehensions, but rather that the local namespace can be altered anywhere an expression is used — which is everywhere.

That trivial example is unsurprising, but as soon as your line of code gets a bit longer, it could be far more hidden.

I’m not saying it’s not worth it, but it a more significant complication than simply adding a new feature like augmented assignment or terniary expressions, where the effect is seen only where it is used.

A key problem with thinking about this is that we can scan existing code to find places where this would improve the code, and decide if those use-cases would cause confusion.

But we really can’t anticipate all the places where it might get used (perhaps inappropriately) that would cause confusion. We can hope that people won’t tend to do that, but who knows?

Example: in a function argument:

result = call_a_func(arg1, arg2, kwarg1=x, kwarg2=x:=2*y)

Sure, there are always ways to write bad code, and most people wouldn’t do that, but someone, somewhere, that thinks shorter code is better code might well do it. Or something like it.

After all, expressions can be virtually anywhere in your code.

Is this a real risk? Maybe not, but it is a complication.

-CHB



More information about the Python-Dev mailing list