In Python 3, the following returns a map object:
map(lambda x: x**2, range(10))
If we want to turn this object into a list, we can just cast it as a list using list(mapobject)
. However, I discovered through code golfing that
*x, = mapobject
makes x into a list. Why is this allowed in Python 3?
This is an example of extended iterable unpacking, introduced into Python 3 by PEP 3132:
This PEP proposes a change to iterable unpacking syntax, allowing to specify a "catch-all" name which will be assigned a list of all items not assigned to a "regular" name.
An example says more than a thousand words:
>>> a, *b, c = range(5) >>> a 0 >>> c 4 >>> b [1, 2, 3]
As usual in Python, singleton tuples are expressed using a trailing comma, so that the extended equivalent of this:
>>> x, = [1]
>>> x
1
… is this:
>>> *x, = range(3)
>>> x
[0, 1, 2]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With