サイトアイコン Python Snippets

可変長引数の設定と呼び出し

通常の引数を可変長引数に

pythonで可変長引数を指定するには、仮引数に*を指定する。関数の実装側では、仮引数をタプルとして扱える。

def func1(a, *others):
    print(a, others)

func1(1)        # 1, ()
func1(1, 2)     # 1, (2,)
func1(1, 2, 3)  # 1, (2, 3)

逆の使い方として、タプルやリストなどのシーケンス型に*をつけると実引数に展開して呼び出すことができる。

以下の例ではa, b, cの引数をそれぞれ指定するのではなく、リストの要素を展開してa,b,cに割り当てている。要素数が引数の数と合わない場合はエラーになる(多くても少なくても)。

def func2(a, b, c):
    print("a={}, b={}, c={}".format(a, b, c))

params = [1, 2, 3])
func2(*params)    # a=1, b=2, c=3

キーワード引数を可変長引数に

pythonでは引数を名前付きで指定することもできる。任意のキーワードで引数を受け付けるには、**をつける。

この場合はdictで扱える。

def func3(a, **others):
    print(a, others)

func3(1, b=2, c=3)   # 1 {'b':2, 'c': 3}

通常の引数と同じように実引数のほうに **をつけることで、dict型をキーワード引数に展開できる。

def func2(a, b, c):
    print("a={}, b={}, c={}".format(a, b, c))

params = {'a':1, 'b':2, 'c':3}
func2(**params)    # a=1, b=2, c=3

任意の引数を受け取れる関数

以下のように リスト形式の可変長引数*argsと、 dict形式の引数**kwargs を受け取るようにすると、どのような引数でも受け付けられるようになる。

def func(*args, **kwargs):
    print(args, kwargs)
関連記事:

モバイルバージョンを終了