thumbnail

【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

引数のスター演算子

引数でスター演算子を用いると、逆に変数をパックする(tupledictにまとめる)ことが可能です。 アンパックと比べたら、あまり使わないかもしれません(個人の感想です)😅

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.DataFrameassignなどではこの**kwargsが引数として使用されています。

DataFrame-assign

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html

おわり

最悪使えなくても意味を知ってればOK 👌

author picture

Mitsuru Takahashi

京都市内にてフリーランスエンジニアとして活動しています。

detail

Profile

author picture

Mitsuru Takahashi

京都市内にてフリーランスエンジニアとして活動しています。

detail

© 2022 mitsuru takahashi