可変長引数

このページでは可変長引数について解説します。非常に便利な機能なのですが、バリエーションが多いため苦手とする方も多いかもしれません。とはいえ前回学習した「位置引数」と「キーワード引数」がわかっていればすんなり理解できるかと思います。
(※この記事は入門編「関数の定義」を加筆分割したものになります。)

可変長引数

可変長引数とは、関数の引数の数を呼び出し時に動的に変動させることができる記法です。位置引数とキーワード引数とで分けて考えると理解がスムーズかと思います。

可変長な位置引数

可変長な位置引数を使用する場合は以下のように記述します。

可変長引数その1
def 関数名(引数1, 引数2,,,, *args):

サンプルです。以下は可変長な位置引数をもった関数です。呼び出し側は引数の個数をいくつでも可変長に指定することができます。一方、関数側はargsにタプルとして格納されます。

def sample_function(x, y, *args):
    print(x, y, args)


sample_function("a", "b")           # 引数2つ
# a b ()

sample_function("a", "b", "c")      # 位置引数1つ追加
# a b ('c',)

sample_function("a", "b", "c", "d") # 位置引数2つ追加
# a b ('c', 'd')

実行すると、追加した引数がargsに格納されていることが確認できます。なお、慣習上、可変長な位置引数はargsという名前がよく使用されます。

可変長なキーワード引数

可変長なキーワード引数を使用する場合は以下のように記述します。

可変長引数その2
def 関数名(引数1, 引数2,,,, **kwargs):

サンプルです。以下は可変長なキーワード引数をもった関数です。呼び出し側はキーワード引数いくつでも可変長に指定することができます。一方、関数側はkwargsに辞書形式で格納されます。

def sample_function(x, y, **kwargs):
    print(x, y, kwargs)


sample_function("a", "b")                # 引数2つ
# a b {}

sample_function("a", "b", z="c")         # キーワード引数1つ追加
# a b {'z': 'c'}

sample_function("a", "b", z="c", w="d")  # キーワード引数2つ追加
# a b {'z': 'c', 'w': 'd'}

追加した引数がkwargsに格納されていることが確認できます。なお、慣習上、可変長なキーワード引数はkwargsという名前がよく使用されます。

可変長な位置引数とキーワード引数

先程の可変長な位置引数、キーワード引数を合わせて記述することも可能です。

可変長引数その2
def 関数名(引数1, 引数2,,,, *args, **kwargs):
def sample_function(x, y, *args, **kwargs):
    print(x, y, args, kwargs)


sample_function("a", "b", "c", w="d")  # 位置引数1つ追加 & キーワード引数2つ追加
# a b ('c',) {'w': 'd'}

追加した位置引数がargsに、追加したキーワード引数がkwargsに格納されていることが確認できます。