アスタリスクによるunpacking
アスタリスク(*)ってなんですか? という読者の方もいらっしゃるかもしれません。私から解説しても良いのですが、一流のPython芸人を目指すのであれば公式ドキュメントを読むべきです(価値観の押し付け)。
公式ドキュメントを読む
An asterisk * denotes iterable unpacking. Its operand must be an iterable.
The iterable is expanded into a sequence of items, which are included in the new tuple, list, or set, at the site of the unpacking.
和訳すると「アスタリスクはイテラブル(筆者注1)のunpacking(筆者注2)を意味する。その被演算子(筆者注3)はイテラブルでなければならない。被演算子のイテラブルは、その構成要素の配列に展開され、unpackingされた場所で新しいtuple, listまたはsetの構成員となる。」といったところでしょうか。
つまり[string, *string_or_list]
において、string_or_list
を構成する要素が*
によってバラされて、list_or_str
の構成員になったと考えるのが本来的です。
- 筆者注1: ざっくりfor文で回せるデータ型、と理解しておけば十分
- 筆者注2: 分解、くらいの意味
- 筆者注3: 被演算子(operand)は演算子(operator)の効果を受ける対象のこと。演算子は演算をコンピュータに演算を命令するためのシンボルで、
+
や-
がその一種である。 1+1
というプログラムにおいて、+
は演算子であり1
は被演算子である。*string_or_list
において*
は演算子でありstring_or_list
は被演算子である。
だったらこんなこともできる
アスタリスクの被演算子がイテラブルということなら、以下のコードだって成立することになりますね。私も今まで気づきませんでした。