为什么在解包元组时var类型会发生变化?

pla*_*etp 2 python tuples list python-3.x

考虑这个例子:

>>> t = (1, 2, 3)
>>> a, b, c = t
>>> a, b, c
(1, 2, 3)
>>> a, *b = t
>>> a, b
(1, [2, 3])
Run Code Online (Sandbox Code Playgroud)

在解压缩元组时,为什么我会得到一个列表而不是一个元组a, *b = t

iz_*_*iz_ 8

PEP 3132中所述,这是扩展的可迭代解包.类型没有"改变"; 它只是定义了解*包将在所有情况下产生一个列表.

有人建议它屈服:

  • 元组而不是列表:

使加星标的目标成为元组而不是列表.这与函数一致*args,但更难以进一步处理结果.

  • 与右侧相同的类型:

尝试以得到加星号的目标的相同类型的源可迭代,例如,ba, *b = 'hello'将被分配的字符串'ello'.这可能看起来不错,但不可能与所有迭代一致.

最终,这些提案遭到拒绝.

有关更多信息,请参阅此处此处.