<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2018-04-11 18:01 GMT+03:00 Kirill Balunov <span dir="ltr"><<a href="mailto:kirillbalunov@gmail.com" target="_blank">kirillbalunov@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><span class="gmail-"><br><div class="gmail_quote">2018-04-11 16:50 GMT+03:00 Chris Angelico <span dir="ltr"><<a href="mailto:rosuav@gmail.com" target="_blank">rosuav@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-m_5127542446377802726gmail-"><br>
</span>Can you give an example of how your syntax is superior to the more<br>
general option of simply allowing "as" bindings in any location?<br>
<br></blockquote></div><br>
</span><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">This is not my syntax :) And not even my idea</span></span>. 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">I just do not understand, and even a little skeptical about
 allowing "as" bindings in **any location** with global scoping. 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">All the examples in this thread and the previous ones, as well as almost all PEP's examples show how this feature will be useful in `if`, `while` statements and comprehension/generator expressions. <span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">And it excellently solves this problem</span></span>.  T<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">his feature increases 
the capabilities of these statements and also positively affects the 
readability of the code and it seems to me that everyone understands 
what this means in this context without ambiguity in their meaning in `while` or `with`</span></span> statements.<br><br>
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">The remaining examples (general ones) are far-fetched, and <span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">I do not have much desire to discuss them :) 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">These include</span></span>:<br></span></span></span></span></span></span></span></span></div><div class="gmail_extra" style="margin-left:40px"><span class="gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">
 <span style="font-family:monospace,monospace"><br>lambda: x := lambda y: z := a := 0</span></span></span></span></span></span></span></span></span><span style="font-family:monospace,monospace"><br></span></span><span class="gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span style="font-family:monospace,monospace">
y = (<span class="gmail-m_5127542446377802726gmail-im">(eggs := spam()), (cheese := eggs.method()), cheese[eggs])</span> 

</span><br></span></span></span></span></span></span></span></span></span></div><div class="gmail_extra" style="margin-left:40px"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">and others of these kind...<br></span></span></span></span></span></span></span></span></div><div class="gmail_extra"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-"> <br></span></span></span></span></span></span></span></span><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"></span></span></span></span>
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">Thus, I do not 
understand why to solve such a general and complex problem, when this 
syntax is convenient only in specific cases. 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">In addition, previously the concept of a 
Statement-Local Name Bindings was discussed, <span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">which I basically like</span></span> (and it fits the above idea). 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">In this version, it was abandoned completely</span></span>,


<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-short_text" lang="en"><span class="gmail-m_5127542446377802726gmail-">but it is unclear for what reasons</span></span>.<br></span></span> <br></span></span></div><div class="gmail_extra"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">p.s.: 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">Maybe someone has use-cases outside 
<span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-"><span id="gmail-m_5127542446377802726gmail-result_box" class="gmail-m_5127542446377802726gmail-" lang="en"><span class="gmail-m_5127542446377802726gmail-">`if`, `while`</span></span></span></span>

and comprehensions, but so far no one has demonstrated them</span></span>.<br></span></span></div><div class="gmail_extra"><br></div></div>
</blockquote></div><br></div><div class="gmail_extra">I find that I wrote very vague, so I'll try in response to my answer to add some specifics. In general, I find this idea missed in the language and thank you for trying to fix this! In my opinion it has only a meaning in certain constructions such as `while`, `if`, `elif` and maybe comprehensions\generators. <span style="text-align:start;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">As a general form "anywhere" it can be _useful_, but makes the code unreadable and difficult to perceive while giving not so much benefit. What I find nice to have:</span></div><div class="gmail_extra"><br></div><div class="gmail_extra">Extend while statement syntax:</div><div class="gmail_extra"><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><font face="monospace, monospace"><span style="font-size:12.8px"> while (input("> ") as </span><span style="font-size:12.8px">command</span><span style="font-size:12.8px">) != "quit":</span></font><div class="gmail_extra"><font face="monospace, monospace"><span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">     print("You entered:", command)</span>

</font> </div></blockquote><div class="gmail_extra"><br></div><div class="gmail_extra">Extend if statement syntax:</div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"></blockquote><span style="font-size:12.8px"> </span><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"><font face="monospace, monospace">if re.search(pat, text) as match:</font></span></div><div><div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="monospace, monospace">    print("Found:", match.group(0))</font></span></div></div></div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="monospace, monospace"><br></font></span></div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="monospace, monospace">

</font><div style="color:rgb(34,34,34);font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:12.8px"><font face="monospace, monospace">if (re.search(pat, text) as match) is not None:</font></span></div><div style="color:rgb(34,34,34);font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="monospace, monospace">    print("Found:", match.group(0))</font></span></div></div><div class="gmail_extra" style="font-family:arial,sans-serif"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div></div></span></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><div class="gmail_extra"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">also `elif` clauses should be extended to support.</span></div><div class="gmail_extra"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div></div></span></div></blockquote><span style="font-size:12.8px">Extend comprehensions syntax:</span><div><span style="font-size:12.8px"><br></span></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"><font face="monospace, monospace"># Since comprehensions have an if clause</font></span></div><div><span style="font-size:12.8px"><font face="monospace, monospace">

<span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">[y for x in data if (f(x) as y) is not None]</span>

</font><br></span></div><div><span style="font-size:12.8px"><br></span></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"><font face="monospace, monospace"># Also this form without `if` clause</font></span></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"><font face="monospace, monospace">

<span style="color:rgb(34,34,34);font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">[(y, x/y) with f(x) as y for x in range(5)]</span></font>

</span></div><div><br></div></blockquote>Extend ternary expression syntax:<div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="monospace, monospace">data = y/x if (f(x) as y) > 0 else 0</font></div><div><br></div></blockquote>I think that is all. And it seems to me that it covers 99% of all the use-cases of this feature. In my own world I would like them to make a local _statement_ binding (but this is certainly a very controversial point). I even like that this syntax matches the `with` an `except` statements syntax, although it has a different semantic. But I do not think that anyone will have problems with perception of this.</div><div><br></div><div>With kind regards,</div><div>-gdg</div></div>