目次

目次

Pythonのアンパックとタプル

アバター画像
海津 純平
アバター画像
海津 純平
最終更新日2019/10/11 投稿日2019/10/11

はじめに

Pythonの初見殺しです。

初見殺し

Python 3.7.2 (default, Feb 12 2019, 08:15:36) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> *range(5)
  File "<stdin>", line 1
SyntaxError: can't use starred expression here
>>> *range(5),
(0, 1, 2, 3, 4)

つらい。。。

解説

【 * 】アンパック

まず *ですがアンパックと呼ばれるものです。 https://docs.python.org/ja/3.7/tutorial/controlflow.html#unpacking-argument-lists iterableなオブジェクトを分解します。

>>> list  = [1,2,3]
>>> print(*list)
1 2 3

これは listが分解されて、print(list[0], list[1], list[2]) のようにそれぞれ引数に渡す形になるのでこのような結果になります。 (Python3だとprintは関数)

つまり *range(5) は分解しただけ、でどのようなオブジェクトにすれば良いのかかわかりません。 そこで , をつけるのです。

【 , 】タプル

実はPythonでタプルを作るのは ()ではなく,です。 https://docs.python.org/ja/3.7/library/stdtypes.html#tuples

>>> 1,2,3
(1, 2, 3)

つまり

<em>range(5) でiterableなオブジェクトをアンパック → </em>range(5), カンマをつけてタプルとしてアンパック →
(0, 1, 2, 3, 4) となります。

まとめ

Python便利なのと簡潔に書けすぎて注意が必要ですね。 仕様をしっかり理解しましょう。

アバター画像

海津 純平

目次