例如,考虑一下

squares = *map((2).__rpow__, range(5)),
squares
# (0, 1, 4, 9, 16)

*squares, = map((2).__rpow__, range(5))
squares
# [0, 1, 4, 9, 16]

所以,在其他条件相同的情况下,我们在lhs上绘制时得到一个列表,在rhs上绘制时得到一个元组.

为什么?

这是故意的吗?如果是,理由是什么?或者,如果没有,是否有任何技术原因?还是只是这样,没有特别的原因?

推荐答案

在RHS上得到一个元组的事实与splat无关.splat只是解压了你的map迭代器.解包的内容取决于您使用的元组语法:

*whatever,

而不是列表语法:

[*whatever]

或设置语法:

{*whatever}

你本可以得到一份 list 或一套.你刚刚告诉Python制作一个元组.


在LHS上,飞溅的分配目标总是生成一个列表.不管你是否使用"元组风格"

*target, = whatever

或者"列表风格"

[*target] = whatever

目标列表的语法.语法看起来很像创建列表或元组的语法,但目标列表语法是完全不同的.

您在左边使用的语法是在PEP 3132年引入的,用于支持以下用例:

first, *rest = iterable

在解包任务中,iterable的元素按位置分配给未排序的目标,如果有带星号的目标,则任何额外的元素都会填充到列表中并分配给该目标.A list was chosen instead of a tuple to make further processing easier.因为你的例子中有一个带星号的目标,所以所有项目都在分配给该目标的"额外项目"列表中.

Python-3.x相关问答推荐

海象表达可以放在方括号中而不是括号中吗?

使用Polars阅读按日期键分区的最新S3镶木地板文件

Gekko优化超出了方程式的界限(由于某种原因,会产生变量)

如何在matplotlib中显示次要刻度标签

按一列分组,如果日期列相同,则在数字列中填写缺少的值

在Pandas 数据帧中为小于5位的邮政编码添加前导零

Python VS Code 自动导入路径包含 src

检测点坐标 - opencv findContours()

Python 舍入数字不准确

使用 GEKKO 使用代码解决最佳时间控制问题时出现 IndexError

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

用于 BIG 数组计算的多处理池映射比预期的要慢

SqlAlchemy - 从 oracle db 中检索长文本

参数化泛型不能与类或实例判断一起使用

Python - 如何从同一台客户端机器运行多个Flask应用程序

创建日志(log)文件

cv2 python 没有 imread 成员

Python中的多行日志(log)记录

Django Rest 框架 ListField 和 DictField

使用 Python 3 读取 CSV 文件