gpt4 book ai didi

python - 为什么 splatting 在 rhs 上创建一个元组,但在 lhs 上创建一个列表?

转载 作者:IT老高 更新时间:2023-10-28 21:37:01 24 4
gpt4 key购买 nike

例如,考虑

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

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

所以,在其他条件相同的情况下,我们会在左对齐时得到一个列表,在右轴上喷射时得到一个元组。

为什么?

这是设计使然,如果是,其基本原理是什么?或者,如果没有,是否有任何技术原因?还是就是这样,没有什么特别的原因?

最佳答案

您在 RHS 上获得一个元组的事实与 splat 无关。 splat 只是解压缩您的 map 迭代器。你将它解压成什么取决于你使用了元组语法:

*whatever,

而不是列表语法:

[*whatever]

或设置语法:

{*whatever}

你可以得到一个列表或一组。你刚刚告诉 Python 创建一个元组。


在 LHS 上,一个 splatted 分配目标总是产生一个列表。是否使用“元组样式”都没关系

*target, = whatever

或“列表样式”

[*target] = whatever

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

您在左侧使用的语法是在 PEP 3132 中引入的。 , 以支持像

这样的用例
first, *rest = iterable

在解包分配中,可迭代的元素按位置分配给未加星标的目标,如果有已加星标的目标,则将任何额外内容填充到列表中并分配给该目标。 A list was chosen instead of a tuple to make further processing easier .由于您在示例中只有一个加星标的目标,所有项目都进入分配给该目标的“附加”列表中。

关于python - 为什么 splatting 在 rhs 上创建一个元组,但在 lhs 上创建一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com