On 15 Mar 2008, at 16:15, Guido van Rossum wrote: > Thomas Wouters suggests some new syntax: > > http://bugs.python.org/issue2292 > >>>> a, b, *c = range(5) > >>>> *a, b, c = a, b, *c >>>> a, b, c > ([0, 1, 2], 3, 4) >>>> [ *a, b, c ] > [0, 1, 2, 3, 4] >>>> L = [ a, (3, 4), {5}, {6: None}, (i for i in range(7, 10)) ] >>>> [ *item for item in L ] > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] > > Also, yielding everything from an iterator: > >>>> def flatten(iterables): > ... for it in iterables: > ... yield *it > ... >>>> L = [ a, (3, 4), {5}, {6: None}, (i for i in range(7, 10)) ] >>>> flatten(L) > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] > > What do people think?
With this syntax, one will be able to write: >>> t = (1, 2, 3) >>> [*t] [1, 2, 3] >>> {*t} {1, 2, 3} Will these become idioms replacing list(), tuple(), set()? Moreover the '*' also competes with the '+' operator: >>> t = (1, 2) >>> l = [1, 3] >>> [*t, *l] # replaces list(t) + l [1, 2, 1, 3] >>> {*t, *l} # replaces set(t) + set(l) {1, 2, 3} >>> (*t, *l) # replaces t + tuple(l) (1, 2, 1, 3) It is more versatile because, for example, t + l wouldn't work. I don't know how desirable it is. -- Arnaud _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com