はじめに
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便利なのと簡潔に書けすぎて注意が必要ですね。 仕様をしっかり理解しましょう。
海津 純平