<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif">On Tue, Oct 31, 2017 at 10:01 AM, Chris Angelico </span><span dir="ltr" style="font-family:arial,sans-serif"><<a href="mailto:rosuav@gmail.com" target="_blank">rosuav@gmail.com</a>></span><span style="font-family:arial,sans-serif"> wrote:</span><br></div><div class="gmail_extra"><div class="gmail_quote"><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_-8647684916809307424gmail-">On Tue, Oct 31, 2017 at 6:46 PM, Steven D'Aprano <<a href="mailto:steve@pearwood.info" target="_blank">steve@pearwood.info</a>> wrote:<br>
> On Tue, Oct 31, 2017 at 06:02:34PM +1100, Chris Angelico wrote:<br>
</span><span class="gmail-m_-8647684916809307424gmail-">>> One small change: If you use next(i) instead of i.next(), your code<br>
>> should work on both Py2 and Py3. But other than that, I think it's<br>
>> exactly the same as most people would expect of this function.<br>
><br>
> Not me. As far as I can tell, that's semantically equivalent to:<br>
><br>
> def single(i):<br>
>     result, = i<br>
>     return result<br>
><br>
> apart from slightly different error messages.<br>
<br>
</span>I saw the original code as being like the itertools explanatory<br>
functions - you wouldn't actually USE those functions, but they tell<br>
you what's going on when you use the simpler, faster, more compact<br>
form.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:monospace,monospace">​I wonder if that's more easily understood if you write it along these line(s):</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">  (the_bob,) = ​(name for name in ('bob','fred') if name=='bob')</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">People need to learn about how to make a 1-tuple quite early on anyway, and omitting the parentheses doesn't really help there, AFAICT. Then again, the idiom looks even better when doing</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">  a, b = find_complex_roots(polynomial_of_second_order)<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">Except of course that I couldn't really come up with a good example of something that is expected to find exactly two values from a larger collection, and the students are already coming into the lecture hall.<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><div class="gmail_default">Or should it be</div><div class="gmail_default"><br></div><div class="gmail_default">  (a, b,) = find_complex_roots(polynomial_of_second_order)</div><div><br></div></div><div class="gmail_default" style="font-family:monospace,monospace">?</div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">––Koos</div><br></div><div> </div></div>-- <br><div class="gmail-m_-8647684916809307424gmail_signature">+ Koos Zevenhoven + <a href="http://twitter.com/k7hoven" target="_blank">http://twitter.com/k7hoven</a> +</div>
</div></div>