Just clarifying a fine point here:

[Steven D'Aprano <st...@pearwood.info>]
> ...
> average = 0
> smooth_signal = [(average := (1-decay)*average + decay*x) for x in signal]
> assert average == smooth_signal[-1]
>
> I'm not even sure if "given" will support this. Nick is arguing strongly
> that bound targets should be local to the comprehension, and so I think
> you can't even write this example at all with Nick's scoping rule.

You can't under Nick's proposal(s), at least not directly (there are
always "tricks").  But it also blows up with UnboundLocalError (for
the "average" in "(1-decay)*average") under the current PEP 572 (the
":=" PEP).

I've proposed to change 572's scoping rules for targets of assignment
expressions appearing in comprehensions so that "it would just work"
instead, but that's getting strong opposition too.  My favorite so far
was Nick's (Coghlan's) entertainingly hyperbolic:

    "Comprehension scopes are already confusing, so it's OK to dial their
    weirdness all the way up to 11" is an *incredibly* strange argument to be
    attempting

:-)

The scope issues are logically independent of assignment-expression
spelling, but it's a pretty safe guess Nick is opposed to that example
ever "just working" regardless of spelling, while PEP 572 doesn't
currently support it anyway.  Last I heard, Chris (Angelico - the
PEP's author) didn't seem keen on changing it either.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to