教育のために、これを少し長くします。
Python では、タプルは括弧で区切られます (例: (1, 2, 3)
.
残念ながら、 のような 1 つの要素だけで構成されるタプルは1
、単に として指定すると (解析の観点から) あいまいになります。これは、式の途中の括弧内の整数(1)
を意味する可能性があるためです。
これを克服するために、 のように、要素の直後に 1 つのコンマが続く 1 つの要素だけを持つタプルを指定できます(1,)
。(明確にするために、コンマはそれをタプルにするものであり、かっこではありません。括弧は、あいまいでない場合に省略できます。これは、以下で行うことです)。1
これは、次の例に示すように、要素として単一のシングルを含むタプルであることは明らかです。
>>> a = (1)
>>> a
1
>>> b = (1,)
>>> b
(1,)
>>> b[0]
1
>>> c, = b
>>> c
1
>>>
あなたが言及したのは、タプルを「アンパック」する方法、つまり、タプルの特定の要素にアクセスする方法です。b[0]
使用した構文に代わる 1 つの方法は、上記の例のmy のように、タプル内の要素を 0 でインデックス付けすることです。
複数の要素を持つタプルの場合、タプルが持つ要素と同じ数の属性を指定するだけで、それらをアンパックできます。
>>> x, y = (1, 2)
>>> x
1
>>> y
2
タプルをアンパックするときに同じ数の要素を使用しないと、例外がスローされます。
>>> z, = (1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>>
解凍理論が「失敗する」理由の「例」では、次のように単純に使用できます。
>>> a, _ = [2, 3]
>>> a
2
そこに注意してください_
。これは、「気にしない」という意味で Python で使用される通常の変数です。
補足として、 では、可変型であるlistから、不変型であるtuplea, _ = [2,3]
を暗黙的に作成していることに注意してください。(この「暗黙の」変換は概念的なものであることに注意してください。Python インタープリターはバイトコードで命令を生成しない可能性があるためです)。次の属性の微妙な点に注意してください。BUILD_TUPLE
>>> a, b = [2, 3]
>>> a
2
>>> b
3
>>> a, b
(2, 3)
>>> c, d = tuple([2, 3])
>>> c
2
>>> d
3
>>> e = [2, 3]
>>> type(e)
<type 'list'>
>>> type((a, b))
<type 'tuple'>