[Python-3000] Using *a for packing in lists and other places
Thomas Wouters
thomas at python.org
Sat Mar 15 17:51:30 CET 2008
On Sat, Mar 15, 2008 at 9:15 AM, Guido van Rossum <guido at python.org> 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]
>
As you mentioned in the ticket, that's actually a cut-and-paste error:
>>> flatten(L)
<generator object at 0xb7cc5fb4>
>>> list(flatten(L))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Also, it does sets and setcomps too:
>>> { *a, 0, 4}
{0, 1, 2, 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}
--
Thomas Wouters <thomas at python.org>
Hi! I'm a .signature virus! copy me into your .signature file to help me
spread!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-3000/attachments/20080315/5b65c86b/attachment.htm
More information about the Python-3000
mailing list