On 8/1/2013 1:58 PM, Chris Angelico wrote:
On Thu, Aug 1, 2013 at 6:35 PM, Ian Kelly <ian.g.ke...@gmail.com> wrote:
yield was a statement before it became an expression, and the syntax
"yield x, y, z" was (and still is) perfectly legal, with all three
expressions (technically a single tuple expression) being governed by
the yield. That is to say, "yield x, y, z" and "yield (x, y, z)" are
semantically equivalent. When it became an expression, in order to
preserve this equivalence, that meant that the yield expression needed
to bind even less tightly than the comma. In terms of the grammar,
yield needed to take an expression_list, not just an expression.
There are only three places in the grammar where expression_lists are
used without enclosing them in brackets: expression statements (in
this case analogous to the yield statement), the return statement (not
normally used to return a value in a generator), and the assignment
statements. So for consistency and clarity the rules for
parenthesizing yield statements are basically adopted from the
existing rules for parenthesizing expression_lists.
Ahh, right. That makes good sense.
If this were being created anew now, would yield be made to bind more
tightly than the comma?
As a statement (which is the primary use of yield), yield is like
return, except that the execution frame is not discarded. So I think it
should bind like return, which is very loosely.
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list