46

Peter Norvig のSolving Every Sudoku Puzzle エッセイを読んで、これまで見たことのない 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

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

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

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

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

>>> 1
1
>>> _
1

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

于 2009-11-10T14:24:29.907 に答える