[Python-ideas] return value of yield expressions
H. Krishnan
hetchkay at gmail.com
Tue Sep 13 19:04:57 CEST 2011
>
> Consider this example:
>
> def foo():
> *(a, b) = yield
>
> f = foo()
> next(f)
> f.send(1, 2) # Ok
>
> def wrapper(g):
> r = next(g)
> while 1:
> args = (yield r)
> r = g.send(args) # BOOM!
>
> f = wrapper(foo())
> next(f)
> f.send(1, 2) # BOOM!
>
>
> That wrapper works today, and does nothing (except messing up throw
> handling, but that is a different story). With your suggested change,
> such a wrapper would break unless it was changed to use
>
> *(*args, **kwargs) = (yield r)
>
> instead. IOW a backwards incompatible change.
>
I still don't get it. f.send(1, 2) is not allowed now. The wrapper will
still work for send() with single argument and so there is no backward
compatibility issue. The wrapper itself could be updated to support multiple
arguments to send if and when it is allowed.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20110913/24d6029b/attachment.html>
More information about the Python-ideas
mailing list