为什么在Python 3中,*x能够解包映射对象?

6
在Python 3中,以下语句返回一个map对象:
map(lambda x: x**2, range(10))

如果我们想将这个对象转换成列表,我们只需要使用list(mapobject)进行强制类型转换。但是,我在代码高尔夫比赛中发现……

*x, = mapobject

将x转换成列表。为什么在Python 3中允许这样做?

https://dev59.com/0mw05IYBdhLWcg3w41sp duplicate?这是一个关于编程的问题,询问是否有关于解包、扩展解包和嵌套扩展解包的重复问题。请提供翻译后的文本。 - juanpa.arrivillaga
@juanpa.arrivillaga 我认为所提出的重复问题更像是一篇抱怨而不是一个真正的问题(如果今天写的话,我会投票将其关闭为主观性问题)。虽然被接受的答案很好,并且确实提到了 *x, = iterable 语法,但我不认为其他人在寻找 Sandeep 的问题答案时能够像在这里一样轻松地找到它。无论如何,感谢您没有立即打击它...我会将此带到 chat 并看看更大的群体的想法。 - Zero Piraeus
1个回答

9

这是Python 3 中通过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]

像往常一样,在Python中,使用尾随逗号来表示单例元组,因此这个:

```python x = (1,) ```

等价于:

```python x = 1, ```
>>> x, = [1]
>>> x
1

...是这样的:

>>> *x, = range(3)
>>> x
[0, 1, 2]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接