On Wed, Aug 29, 2012 at 6:57 AM, Ned Batchelder
On 8/29/2012 9:50 AM, Carlo Pires wrote:
Hi,
I was just wondering why unpack of sequences did not follow same behavior of functions parameters. I mean:
first, *rest = 'a b c'.split()
should work in python, why doesn't it?
It does in Python 3:
Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information.
first, *rest = 'a b c'.split() first 'a' rest ['b', 'c']
Note, however, that putting too much faith in the analogy between assignment and function calls leads to disappointment. E.g. there's a big difference between a = 42 and a = 42, while there is no difference between f(42) and f(42,) Also of course assignment has no equivalent to keyword parameters, nor does it (currently) allow a "lone star" -- although it would be handy to be able to say a, b, * = xs as a shorthand for a, b, *_ = xs del _ Also of note: after a, b, *z = xs z is a list, whereas in def foo(a, b, *z): ... z will be a tuple. (The latter is arguably a design mistake.) Plus in Pythin 3 you can't say def foo(a, (b, c), d): ... whereas the tuple unpacking even supports nested stars: a, (b, c, *d), e, *f = [1, range(10), 2, 3, 4, 5} PS. Asking "why does Python not do X" is generally considered a leading question. -- --Guido van Rossum (python.org/~guido)