Pythonのアンパックとタプル

Python

はじめに

Pythonの初見殺しです。

初見殺し

つらい。。。

解説

【 * 】アンパック

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

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

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

【 , 】タプル

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

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

まとめ

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

Python