[Python-ideas] Inline assignments using "given" clauses

Steven D'Aprano steve at pearwood.info
Sat May 12 22:27:26 EDT 2018

On Sat, May 12, 2018 at 01:13:05PM -0500, Tim Peters wrote:
> Just clarifying a fine point here:
> [Steven D'Aprano <steve at 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).

Yes, but I've sort of assumed that if PEP 572 has even a microscopic 
chance of being accepted, it will have to be changed, given that Guido 
has already stated that the only behaviour that makes sense is what you 
and I have been suggesting. Unless Guido has changed his mind, the 
relevant links are:



So maybe this is a tiny bit naughty (or a lot...) but I've just been 
ignoring what the PEP currently says and going by what it ought to say


More information about the Python-ideas mailing list