【问题标题】:Why does unpacking of `*a, b = something` makes `a` always `list` type?为什么解压 `*a, b = something` 会使 `a` 总是 `list` 类型?
【发布时间】:2019-11-12 15:51:58
【问题描述】:

我只是在拆包测试,

我意识到:

*a, b = {1, 2, 3}

使a 成为list,而不是set

以它为:

[1, 2]

我试过了:

*a, = {1, 2, 3}

期待set,但它仍然变成list

[1, 2, 3]

即使是元组:

*a, = (1, 2, 3)

list 的作用与 set 的作用相同。

出于某种原因,这对我来说似乎不对,我认为这是故意的。

【问题讨论】:

  • 它怎么可能保留任意 RHS 可迭代的类型?如果 RHS 是 map 对象或文件怎么办?
  • 见:python.org/dev/peps/pep-3132。 “这个 PEP 提议对可迭代解包语法进行更改,允许指定一个“包罗万象”的名称,该名称将被分配一个包含所有项目的 list...“
  • 我认为stackoverflow.com/questions/56237733/… 从不同的角度对此进行了很多介绍

标签: python list types unpack iterable-unpacking


【解决方案1】:

讨论的可能变化是:

[...]

尝试给加星标的目标与源可迭代对象相同的类型, 例如,a, *b = 'hello' 中的 b 将被分配字符串 'ello'。 这可能看起来不错,但不可能始终如一 所有迭代。

来源:https://www.python.org/dev/peps/pep-3132/

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2011-12-18
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2013-10-07
    • 2019-10-27
    • 2010-11-27
    相关资源
    最近更新 更多