【问题标题】:Meaning of using commas and underscores with Python assignment operator?在 Python 赋值运算符中使用逗号和下划线的含义?
【发布时间】:2010-12-15 01:31:37
【问题描述】:

阅读 Peter Norvig 的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)

下划线是否有基本丢弃列表中返回的第一个值的作用?

【问题讨论】:

    标签: python syntax iterable-unpacking


    【解决方案1】:

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

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

    a 是元组,b 是整数。

    【讨论】:

    • 所以 'b,=T' 意味着从该元组中获取第一个元素?它是 'b=T[0]' 的同义词吗?我需要更多的例子或更少冗长的解释^^
    • 是的,结果是一样的
    【解决方案2】:

    _ 与任何其他变量名称一样,但通常表示“我不关心这个变量”。

    第二个问题:是“价值拆包”。当一个函数返回一个元组时,你可以解包它的元素。

    >>> x=("v1", "v2")
    >>> a,b = x
    >>> print a,b
    v1 v2
    

    【讨论】:

      【解决方案3】:

      Python shell 中的 _ 也指最后一次操作的值。因此

      >>> 1
      1
      >>> _
      1
      

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

      【讨论】:

      • 是的,但在上面给出的上下文中,它是一个“无关紧要”的变量。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 2022-08-17
        • 2014-05-18
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多