[Python-ideas] Unpack of sequences

Guido van Rossum guido at python.org
Wed Aug 29 17:03:49 CEST 2012

On Wed, Aug 29, 2012 at 6:57 AM, Ned Batchelder <ned at nedbatchelder.com> wrote:
> 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


a = 42,

while there is no difference between




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)

More information about the Python-ideas mailing list