<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 4 May 2018 at 22:06, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>(Note: Guido's already told me off-list that he doesn't like the way this spelling reads, but I wanted to share it anyway since it addresses one of the recurring requests in the PEP 572 discussions for a more targeted proposal that focused specifically on the use cases that folks had agreed were reasonable potential use cases for inline assignment expressions.<br><br></div><div>I'll also note that another potential concern with this specific proposal is that even though "given" wasn't used as a term in any easily discovered Python APIs back when I first wrote PEP 3150, it's now part of the Hypothesis testing API, so adopting it as a keyword now would be markedly more disruptive than it might have been historically)</div></div></div></div></blockquote><br></div><div class="gmail_quote">Since I genuinely don't think this idea is important enough to disrupt hypothesis's public API, I've been pondering potential synonyms that are less likely to be common in real world code, while still being comprehensible and useful mnemonics for the proposed functionality.<br><br></div><div class="gmail_quote">The variant I've most liked is the word "letting" (in the sense of "while letting these names have these values, do ..."):<br></div><div class="gmail_quote"><br><div>    # Exactly one branch is executed here<br></div><div>    if m letting m = pattern.search(data):<br>        ...<br><div><div><div>    elif m letting m = other_pattern.search(data)):<br>        ...<br></div><div>    else:<br>        ...<br></div><div><br></div></div></div><div>    # This name is rebound on each trip around the loop<br></div><div></div>    while m letting m = pattern.search(remaining_data)<wbr>:<br>        ...<br><div><div><div><br></div></div></div><div><div>    # "f(x)" is only evaluated once on each iteration<br></div><div></div>    result = [(x, y, x/y) for x in data if y letting y = f(x)]<br><br></div><div>    # Tim's "bind two expressions" example<br></div><div><div>    if diff and g > 1 letting diff = x - x_base, g = gcd(diff, n):<br>
        return g<br><br><div>    # The "bind two expressions" example across multiple lines<br></div><div><div></div></div>    while diff and g > 1 letting (<br>        diff = x - x_base,<br>        g = gcd(diff, n),<br>    ):<br></div><div>
        ... # Do something with diff and g<br></div></div></div><br></div><div class="gmail_quote">Cheers,<br></div><div class="gmail_quote">Nick.</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>