通过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)
下划线是否具有基本上丢弃列表中返回的第一个值的效果?
答案 0 :(得分:34)
d2, = values[s]
就像a,b=f()
一样,除了解包1个元素元组。
>>> T=(1,)
>>> a=T
>>> a
(1,)
>>> b,=T
>>> b
1
>>>
a
是元组,b
是整数。
答案 1 :(得分:15)
_
就像任何其他变量名一样,但通常意味着“我不关心这个变量”。
第二个问题:它是“价值拆包”。当一个函数返回一个元组时,你可以解压缩它的元素。
>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2
答案 2 :(得分:7)
Python shell中的_也指最后一个操作的值。因此
>>> 1
1
>>> _
1
逗号指的是元组解包。会发生的是返回值是一个元组,因此它按照元组元素的顺序解压缩到逗号分隔的变量中。
答案 3 :(得分:5)
您可以在这样的元组中使用尾随逗号:
>>> (2,)*2
(2, 2)
>>> (2)*2
4