web-dev-qa-db-ja.com

Python代入演算子でコンマとアンダースコアを使用する意味?

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)
_

下線には、リストに返された最初の値を基本的に破棄する効果がありますか?

42
matt b

_d2, = values[s]_は、1要素のタプルをアンパックすることを除いて、a,b=f()と同じです。

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

aはタプル、bは整数です。

38
eduffy

_は他の変数名と同じですが、通常は「この変数は気にしない」という意味です。

2番目の質問:「値の展開」です。関数がタプルを返すとき、その要素をアンパックできます。

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

Pythonシェルの_は、最後の操作の値も参照します。したがって、

>>> 1
1
>>> _
1

コンマはタプルのアンパックを指します。何が起こるかというと、戻り値はタプルなので、タプルの要素の順に、コンマで区切られた変数にアンパックされます。

8
blwy10

次のように、タプルで末尾のコンマを使用できます。

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

>>> (2)*2
4
5
Rose Perrone