> On Jun 28, 2018, at 8:21 PM, Tim Peters <tim.pet...@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 _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com