[Python-ideas] return value of yield expressions
Guido van Rossum
guido at python.org
Tue Sep 13 19:34:35 CEST 2011
On Tue, Sep 13, 2011 at 10:21 AM, H. Krishnan <hetchkay at gmail.com> wrote:
>> > (a1, a2, a3 = 3, *args, **kwds) = (yield <expr>)
>> What on earth is this syntax supposed to mean? Never mind that there's
>> a yield on the RHS; it is just a parenthesized expression so it could
>> could be any other function. What on earth do you expect to happen
>> with the syntax on the left, i.e. with the part
>> (a1, a2, a3 = 3, *args, **kwds) = ........whatever........
> As I said "forgeting the backward compatibility issue".
It's not a backwards compatibility issue. Maybe I'm dense, but *I do
not understand what it means in your proposal.*
> Suppose we use
> Jacob's syntax (for argument's sake)
> *(a1, a2, a3 = 3, *args, **kwds) = (yield expr)
> and with g.send(*a, **k) being called, a1, a2, a3, args, kwds can be
> inferred using the same semantics that is used to decipher a1, a2, a3, args,
> kwds in a call to the following function with *a and **k as arguments:
> def func(a1, a2, a3 = 3, *args, **kwds):
I still don't follow. Can you show a specific argument list to send,
e.g. g.send(1, 2, 3, foo='a', bar='b') and then tell me what the
values of a1, a2, a3, args and kwds will be? And, since
X = Y
should always be equivalent to
tmp = Y
X = tmp
can you also tell me what value is supposed to be produced by (yield
expr)? I.e. if I did this:
tmp = (yield expr)
*(a1, a2, a3 = 3, *args, **kwds) = tmp
what would the value of tmp be?
> That (yield expr) can be used in expressions does not (I feel) affect this
> (particularly if we go with Jacob's suggestion of this being a general
> unpacking option), just in the same way that "a, b, *args, c = <tuple>" does
> not affect using tuples in expressions. But after reading your comment in
> another thread about those who don't know how python works should keep
> quiet, I guess it is best if I end this here :-)
I understand "a, b, *c = <something>". I do not understand three
things in your example:
*(....) = <something> # What is the meaning of the prefix *?
*(.... = .....) = <something> # What does an = inside parentheses mean?
*(.... = ......, **kwds) = <something> # What does **kwds mean in this context?
--Guido van Rossum (python.org/~guido)
More information about the Python-ideas