<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Sat, Oct 15, 2016 at 1:49 PM Steven D'Aprano <<a href="mailto:steve@pearwood.info">steve@pearwood.info</a>> wrote:</div><div dir="ltr">...</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
And the transformation of *t for the items of t (I don't care if it is a<br class="gmail_msg">
real transformation in the implementation, or only a fictional<br class="gmail_msg">
transformation) cannot work in a list comp. Let's make the number of<br class="gmail_msg">
items of t explicit so we don't have to worry about variable item<br class="gmail_msg">
counts:<br class="gmail_msg">
<br class="gmail_msg">
    [*t for t in iterable]  # t has three items<br class="gmail_msg">
    [a, b, c for (a, b, c) in iterable]<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
That's a syntax error. To avoid the syntax error, we need parentheses:<br class="gmail_msg">
<br class="gmail_msg">
    [(a, b, c) for (a, b, c) in iterable]<br class="gmail_msg">
<br class="gmail_msg">
and that's a no-op.</blockquote><div><br></div><div>You are confusing here two distinct roles of the parenthesis: disambiguation as in "(1 + 2) * 2", and tuple construction as in (1, 2, 3). This overload is the reason that (1) is not a 1-tuple and we must write (1,).</div><div><br></div><div>You may argue that this overloading causes confusion and make this construct hard to understand, but please be explicit about that; even if <1, 2,3 > was the syntax for tuples, the expansion was still</div><div><br></div><div> [(a, b, c) for (a, b, c) in iterable]</div><div><br></div><div>Since no tuple is constructed here.</div><div> </div><div>Elazar</div></div></div>