【Python】スター演算子(*)の機能まとめ
2021/11/06
ある程度Pythonを使いこなしている方にとっては当たり前の機能かもしれないスター演算子(*
)
よく見かけるけど意味はあまり知らないという方向けに、Pythonにおけるスター演算子の主な機能をまとめてみました
スター演算子によるアンパック
JSのスプレッド構文(...
)はobjectの展開やarrayの展開に使えるので、非常に便利ですよね。
スター演算子を使えばPythonでも同様のことが可能です。
unpack.py
arr = ['a', 'b', 'c']
print(arr) # ['a', 'b', 'c']
print(*arr) # 'a', 'b', 'c'
# array内で展開
print([*arr, 'd']) # ['a', 'b', 'c', 'd']
# tuple型も展開できる
print(*('a', 'b', 'c')) # 'a', 'b', 'c'
dict
を展開させたい場合は、以下のようにスター演算子を2つ連続させることでアンパックが可能です。
unpack.py
def func(arg1, arg2, arg3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three
引数のスター演算子
引数でスター演算子を用いると、逆に変数をパックする(tuple
やdict
にまとめる)ことが可能です。
アンパックと比べたら、あまり使わないかもしれません(個人の感想です)😅
tuple化 (*args)
関数に渡された引数をまとめてtuple
として受け取ることができます。
引数をパックしてまとめて受け取ることができるので、可変長の引数を指定することが可能です。
args.py
def func(*args):
print(args)
func(1, 2, 3) # (1, 2, 3)
def sum(*args):
result = 0
for arg in args:
result += arg
return result
print(sum(1, 2, 3)) # 6
dict化 (**kwargs)
スター演算子を連続させた場合は、関数に渡された引数をまとめてdict
として受け取ることができます。
kwargs.py
def func(**kwargs):
for key, val in kwargs.items():
print(key, val)
func(arg1='one', arg2='two', arg3='three')
# arg1 one
# arg2 two
# arg3 three
pandas.DataFrame
のassign
などではこの**kwargs
が引数として使用されています。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html
おわり
最悪使えなくても意味を知ってればOK 👌