46

阅读 Peter Norvig 的解决每个数独难题的文章,我遇到了一些我以前从未见过的 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

4 回答 4

43

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

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

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

于 2009-11-10T14:22:14.303 回答
18

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

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

>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2
于 2009-11-10T14:18:27.330 回答
8

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

>>> 1
1
>>> _
1

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

于 2009-11-10T14:24:29.907 回答
5

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

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

>>> (2)*2
4
于 2013-10-22T02:47:53.100 回答