<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Oct 17, 2016 at 9:11 AM, Random832 <span dir="ltr"><<a href="mailto:random832@fastmail.com" target="_blank">random832@fastmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Once again, this alleged simplicity relies on the chosen example "x for<br>
x" rather than "f(x) for x" - this one doesn't even put the use of<br>
flatten in the right place to be generalized to the more complex cases.<br>
You'd need list(flatten(f(x) for x in iterable))<br></blockquote><div><br></div><div>What you're saying is EXACTLY 180 deg reversed from the truth.  It's *precisely* because it doesn't need the extra complication that `flatten()` is more flexible and powerful.  I have no idea what your example is meant to do, but the actual correspondence is:</div><div><br></div><div>  [f(x) for x in flatten(it)]</div><div><br></div><div>Under my proposed "more flexible recursion levels" idea, it could even be:</div><div><br></div><div>  [f(x) for x in flatten(it, levels=3)]</div><div><br></div><div>There would simply be NO WAY to get that out of the * comprehension syntax at all.  But a decent flatten() function gets all the flexibility.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Honestly, it goes beyond just being "wrong". The repeated refusal to<br>
even acknowledge any equivalence between [...x... for x in [a, b, c]]<br>
and [...a..., ...b..., ...c...] truly makes it difficult for me to<br>
accept some people's _sincerity_.<br></blockquote><div><br></div><div>I am absolutely sincere in disliking and finding hard-to-teach this novel use of * in comprehensions.</div><div> </div><div>Yours, David...</div><div><br></div><div>P.S. It's very artificial to assume user are unable to use 'from itertools import chain' to try to make chain() seem more cumbersome than it is.  Likewise, I would like flatten() in itertools, but I assume the usual pattern would be importing the function itself.</div></div><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Keeping medicines from the bloodstreams of the sick; food <br>from the bellies of the hungry; books from the hands of the <br>uneducated; technology from the underdeveloped; and putting <br>advocates of freedom in prisons.  Intellectual property is<br>to the 21st century what the slave trade was to the 16th.<br></div>
</div></div>