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)
_
下線には、リストに返された最初の値を基本的に破棄する効果がありますか?
_d2, = values[s]
_は、1要素のタプルをアンパックすることを除いて、a,b=f()
と同じです。
_>>> T=(1,)
>>> a=T
>>> a
(1,)
>>> b,=T
>>> b
1
>>>
_
a
はタプル、b
は整数です。
_
は他の変数名と同じですが、通常は「この変数は気にしない」という意味です。
2番目の質問:「値の展開」です。関数がタプルを返すとき、その要素をアンパックできます。
>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2
Pythonシェルの_は、最後の操作の値も参照します。したがって、
>>> 1
1
>>> _
1
コンマはタプルのアンパックを指します。何が起こるかというと、戻り値はタプルなので、タプルの要素の順に、コンマで区切られた変数にアンパックされます。
次のように、タプルで末尾のコンマを使用できます。
>>> (2,)*2
(2, 2)
>>> (2)*2
4