<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 26 May 2018 at 04:14, Tim Peters <span dir="ltr"><<a href="mailto:tim.peters@gmail.com" target="_blank">tim.peters@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[Peter O'Connor]<br>
>> ...<br>
<span class="">>> We could use given for both the in-loop variable update and the variable<br>
>> initialization:<br>
>>    smooth_signal =  [average given average=(1-decay)*average + decay*x<br>
>>                                 for x in signal] given average=0.<br>
<br>
</span>[Steven D'Aprano <<a href="mailto:steve@pearwood.info">steve@pearwood.info</a>>]<br>
<span class="">> I don't think that will work under Nick's proposal, as Nick does not<br>
> want assignments inside the comprehension to be local to the surrounding<br>
> scope. (Nick, please correct me if I'm wrong.)<br>
<br>
</span>Nick appears to have moved on from "given" to more-general augmented<br>
assignment expressions.</blockquote><div><br></div><div>Aye, while I still don't want comprehensions to implicitly create new locals in their parent scope, I've come around on the utility of letting inline assignment targets be implicitly nonlocal references to the nearest block scope.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">  See PEP 577, but note that it's still a<br>
work-in-progress:<br>
<br>
    <a href="https://github.com/python/peps/pull/665" rel="noreferrer" target="_blank">https://github.com/python/<wbr>peps/pull/665</a><br>
<br>
<br>
Under that PEP,<br>
<br>
    average = 0<br>
    smooth_signal =  [(average := (1-decay)*average + decay*x)<br>
                                 for x in signal]<br>
<br>
Or, for the running sums example:<br>
<br>
    total = 0<br>
    sums = [(total += x) for x in data]<br>
<br>
I'm not entirely clear on whether the "extra" parens are needed, so<br>
added 'em anyway to make grouping clear.<br></blockquote><div><br></div>I think the parens would technically be optional (as in PEP 572), since "EXPR for" isn't legal syntax outside parentheses/brackets/braces, so the parser would terminate the assignment expression when it sees the "for" keyword.</div><div class="gmail_quote"><br></div><div class="gmail_quote">Cheers,</div><div class="gmail_quote">Nick.<br></div><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>   |   Brisbane, Australia</div>
</div></div>