この記事は最終更新日から1年以上が経過しています。
はじめに
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) |
つまり
*range(5) でiterableなオブジェクトをアンパック
→
*range(5), カンマをつけてタプルとしてアンパック
→
(0, 1, 2, 3, 4) となります。
まとめ
Python便利なのと簡潔に書けすぎて注意が必要ですね。
仕様をしっかり理解しましょう。
この記事を書いた人
- 2017年入社の新卒です。
最近書いた記事
- 2019.10.11Pythonのアンパックとタプル
- 2019.01.22JavaScript側でsubmitができない
- 2018.12.13「AWS Toolkit for PyCharm について」~ RecoChoku Tech Night #09 4社合同 AWS re:Invent参加レポート で登壇しました ~
- 2018.12.02シリコンバレー1日ツアーに参加してきました(前半)