<p><br>
On Sep 13, 2011 8:53 PM, "Guido van Rossum" <<a href="mailto:guido@python.org">guido@python.org</a>> wrote:<br>
><br>
> On Tue, Sep 13, 2011 at 11:35 AM, Jacob Holm <<a href="mailto:jh@improva.dk">jh@improva.dk</a>> wrote:<br>
> > The '*(argument list) = <expression>' syntax was my attempt at fixing<br>
> > some of the problems in the original proposal.  I.e. to remove the<br>
> > restriction that it only should work with "= yield", and distinguish the<br>
> > "function argument unpacking" from the regular tuple unpacking.<br>
> ><br>
> > My idea was to allow<br>
> ><br>
> >  *(argument list) = (args, kwds)<br>
> ><br>
> > where the LHS follows all the rules of a function argument list (the<br>
> > part of a function definition between the name and the colon), and<br>
> > the RHS may be any expression that returns a 2-tuple consisting of a<br>
> > sequence and a dictionary.<br>
> ><br>
> > The intended semantics was to compute the arguments that a function with<br>
> > the given argument list would see when called with (*args, **kwds), and<br>
> > make the necessary assignments in the local scope.  Any way I can think<br>
> > of that works today violates DRY.<br>
> ><br>
> ><br>
> > A simple example:<br>
> ><br>
> > *(a, b, c=42, *args, **kwds) = ((1,), {'b':2, 'd':3})<br>
> ><br>
> > assigns a=1, b=2, c=42, args=(), kwds={'d':3}<br>
><br>
> Thanks, I finally understand. Part of the reason why it was unclear to<br>
> me was that I was reading the form inside *(...) as having the same<br>
> priority rules as a regular assignment, where "," binds tighter than<br>
> "="; whereas in a function argument list "=" binds tighter than ",".<br>
><br>
> > And my best hack so far to get the same effect today is:<br>
> ><br>
> > args, kwds = ((1,), {'b':2, 'd':3})<br>
> > a, b, c, args, kwds = \<br>
> >  (lambda a, b, c=42, *args, **kwds:a, b, c, args, kwds)(*args, **kwds)<br>
> ><br>
> ><br>
> > I am not wed to the particular suggested syntax, but I would like to see<br>
> > the functionality available *somehow* in a way where you don't have to<br>
> > repeat the sequence of variable names.  And I don't think that is<br>
> > possible without *some* syntax change.<br>
><br>
> I agree that you can't do this today.</p>
<p>I've only skimmed this so I might be way off track, but isn't this capability (although not the syntax) already covered to an extent by PEP 362?</p>
<p>><br>
> But so what?<br>
><br>
> I am not so convinced that DRY is always the most important rule to invoke.<br>
><br>
> Apart from the extremely esoteric example of wanting to call g.send()<br>
> with a mix of positional and keyword arguments that are somehow<br>
> interpreted as a completely general function parameter list by the<br>
> receiving yield expression, what is the use case?<br>
><br>
> --<br>
> --Guido van Rossum (<a href="http://python.org/~guido">python.org/~guido</a>)<br>
> _______________________________________________<br>
> Python-ideas mailing list<br>
> <a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
> <a href="http://mail.python.org/mailman/listinfo/python-ideas">http://mail.python.org/mailman/listinfo/python-ideas</a><br>
</p>