代码之家  ›  专栏  ›  技术社区  ›  matt b

在python赋值操作符中使用逗号和下划线的意义是什么?

  •  39
  • matt b  · 技术社区  · 15 年前

    读彼得·诺维格的书 Solving Every Sudoku Puzzle essay ,我遇到了一些以前从未见过的Python习惯用法。

    我知道函数可以返回一个值的元组/列表,在这种情况下,可以为结果分配多个变量,例如

    def f():
        return 1,2
    
    a, b = f()
    

    但是下面每一个的含义是什么呢?

    d2, = values[s]  ## values[s] is a string and at this point len(values[s]) is 1
    

    如果 len(values[s]) == 1 那么这句话和 d2 = values[s] ?

    关于在此处使用下划线的另一个问题:

    _,s = min((len(values[s]), s) for s in squares if len(values[s]) > 1)
    

    下划线是否具有基本放弃列表中返回的第一个值的效果?

    4 回复  |  直到 8 年前
        1
  •  34
  •   eduffy    15 年前

    d2, = values[s] 就像是 a,b=f() ,除了解包1个元素元组。

    >>> T=(1,)
    >>> a=T
    >>> a
    (1,)
    >>> b,=T
    >>> b
    1
    >>> 
    

    a 是元组, b 是一个整数。

        2
  •  15
  •   jldupont    15 年前

    _ 和其他变量名一样,但通常它的意思是“我不在乎这个变量”。

    第二个问题:这是“价值解包”。当函数返回元组时,可以解包其元素。

    >>> x=("v1", "v2")
    >>> a,b = x
    >>> print a,b
    v1 v2
    
        3
  •  7
  •   blwy10    15 年前

    python shell中的_u还引用了最后一个操作的值。因此

    >>> 1
    1
    >>> _
    1
    

    逗号表示元组解包。实际情况是返回值是一个元组,因此它按照元组元素的顺序被解包到用逗号分隔的变量中。

        4
  •  5
  •   Rose Perrone    11 年前

    您可以在这样的元组中使用尾随逗号:

    >>> (2,)*2
    (2, 2)
    
    >>> (2)*2
    4