代码之家  ›  专栏  ›  技术社区  ›  Jme

为什么在Python中解包时理解只适用于元组?

  •  0
  • Jme  · 技术社区  · 1 年前

    我试着在元组上使用列表理解,在拆包时效果很好,但在分配给单个变量时效果不佳。

    如果我运行以下代码

    var1, var2, var3 = (i for i in range(3))
    

    var1= 1 ,var2= 2 ,和var3= 3 正如预期的那样。但是,当运行以下程序时

    varTuple = (i for i in range(3))
    

    varTuple= <generator object <genexpr> at [MEMORY ADDRESS]> ,而不是预期的 (1, 2, 3)

    1 回复  |  直到 1 年前
        1
  •  1
  •   Chris    1 年前

    你已经创建了 generator expression 而不是列表(或集合或字典)理解。

    在第一种情况下,您将拆包生成器,因此它将生成三个值。在第二种情况下,您不是,因此没有生成任何值。您只看到生成器对象本身。

    您可能希望显式转换为元组。

    >>> v = (i for i in range(3))
    >>> v
    <generator object <genexpr> at 0x102837c40>
    >>> tuple(v)
    (0, 1, 2)
    

    请注意,发电机一旦用完,就不能再使用了。

    >>> v = (i for i in range(3))
    >>> tuple(v)
    (0, 1, 2)
    >>> tuple(v)
    ()