pythonの可変長引数についてのメモ

あらまし

pythonで覚えたことをメモっておきます。

過去記事の一覧はこちら。 記事一覧 - Baggage Claim

可変長引数

pythonのクラス何もわからんと思いQiitaなどを漁っていたところ、 可変長引数についていい記事を見つけたのでメモっておく。リンクは貼っていいのかよくわからないのでスルー。

可変長引数とは、関数の引数に個数を指定したくないときに使うものである。慣例として、*args や **kwargs などと記すが、大事なのは * の数である。

* ひとつの場合

このときは、任意の数の引数をタプルで受け取る。

def func1(*args):
    print("{}".format(args))
    print(type(args))

temp = str(30)
func1(10, "20", temp)
# (10, "20", "30")
# <class 'tuple'>

func1([0,2,3], [4,5,6])
# ([0,2,3], [4,5,6])
# <class 'tuple'>

func1()
# ()
# <class 'tuple'>
* ふたつの場合

このときは、任意の数の引数を辞書で受け取る。 キーはstr型に変換され、バリューはそのまま。

def func2(**kwargs):
    print("{}".format(kwargs))
    print(type(kwargs))

app = str(5)
func2(tomato = 1, banana = "3", apple = app)
# {"tomato" = 1, "banana" = "3", "apple" = "5"}
# <class 'dict'>

func2(tomato = [1, 2], banana = [3, 4])
# {"tomato"= [1,2], "banana"= [3, 4]}
# <class 'dict'>

func2()
# {}
# <class 'dict'>

可変長引数と普通の引数を組み合わせることもできるが、面倒なので省略。

おわりに

これ知ってればよかったーという場面は思い返しても無いような気がする。