[Python-ideas] return value of yield expressions
Ron Adam
ron3200 at gmail.com
Tue Sep 13 19:23:26 CEST 2011
On Tue, 2011-09-13 at 13:02 +0200, Jacob Holm wrote:
> Your other proposal is really independent of generators I think. I
> too
> would like to see a way to do "function argument unpacking".
>
> args, kwds = (yield ret) # any expression really
> (a1, a2, a3, *args), kwds = (lambda a1,a2,a3=default,*args, **kwds:
> (a1,a2,a3)+args, kwds
> )(*args, **kwds)
>
> is about the shortest way I can come up with that works today, and
> that
> is way too much repetition for my taste. If locals() were writable (a
> change that is unlikely to happen btw), this could be reduced to:
>
> args, kwds = (yield ret) # any expression really
> locals().update(
> (lambda a1,a2,a3=default,*args,**kwds:locals())(*args, **kwds)
> )
>
> which would avoid some of the duplication but is really not that more
> readable.
Instead of extending tuple unpacking, I think I'd prefer to go the other
way and improve function data sharing.
If we could get the functions arguments when a function is done instead
of getting the return value. (The modified function arguments object is
the return value in this case.)
fargs = &foo(a, b, c, d=4)
Then someplace else use that function argument object directly.
bar.__with_args__(fargs) # fargs becomes bar's argument object
It could avoid unpacking and repacking data when it's passed between
compatible functions.
Cheers,
Ron
More information about the Python-ideas
mailing list