[Python-Dev] Half-baked proposal: * (and **?) in assignments

Steve Holden sholden@holdenweb.com
Sat, 23 Nov 2002 12:09:52 -0500


[Gareth]
> Since
>
>     def f(a,b,*c): ...
>     f(1,2,3,4,5)
>
> does (in effect) a=1, b=2, c=(3,4,5), I suggest that
>
>     a,b,*c = 1,2,3,4,5
>
[similar suggestions]
>
> The motivating principle is that parameter passing is,
> or should be, just like assignment[1], so what works in
> one context should work in the other. I've moderately
> often actually wanted the a,b,*c=... notation, too,
> usually when using split() on strings containing an
> unknown number of fields; the most concise alternative
> goes like
>
>     a,b,c = (line.split()+[None])[:3]
>
> which both looks and feels ugly.
>
The advantage, of course, is the explicit nature.

> Of course, you can't take "parameter passing is just like
> assignment" too seriously here, because
>
>     x = 1,2,3
>     a,b,c = x
>
> works, whereas
>
>     def f(x): ...
>     def g(a,b,c): ...
>     f(1,2,3)
>     g(x)
>
> doesn't. Still, the analogy is (to me) quite a compelling one.
>
> Am I nuts?
>
Not nuts, but perhaps striving too hard for a false generality. I would
support this suggestion if it made the assignment code simpler, but if it
complicates it then my feeling is YAGNI.

It's a nice parallel, but n ot one that meets any crying need, IMO.

regards
-----------------------------------------------------------------------
Steve Holden                                  http://www.holdenweb.com/
Python Web Programming                 http://pydish.holdenweb.com/pwp/
Previous .sig file retired to                    www.homeforoldsigs.com
-----------------------------------------------------------------------