キーワード引数

今回は関数の呼び出し時に指定する引数の様々な記法について解説します。
(※この記事は入門編「関数の定義」を加筆分割したものになります。)

位置引数とキーワード引数

Pythonでは引数の指定方法が2つあります。1つはこれまで解説したとおりオーソドックスに順番に指定する方法です。このような指定方法を位置引数と呼びます。2つ目は、キーワード引数と呼ばれ、引数名=値の形式で引数の順序に関係なく指定することができます。サンプルで確認してみましょう。

def sample_function(arg1, arg2):
    print(arg1, arg2)


sample_function('a', 'b') # 順番に引数を指定する
sample_function(arg1='c', arg2='d') # キーワードを指定する
sample_function(arg2='e', arg1='f') # キーワードの場合は順番通りでなくてもよい
sample_function('c', arg2='d') # 後方の引数のみキーワード指定

関数を3回呼び出しています。コード中のコメントで書いたとおり、キーワード引数の場合は順番どおりでなくても問題なく動くことが確認できます。引数が多くなると引数への設定値を誤って書いてしまうことがありますが、キーワード引数を使用するとこういった事故を防ぐことができます。

なお、キーワード引数の後ろに位置引数を設定することは許可されていません。一方、後方の引数のみキーワード指定することは可能です。以下のサンプルはエラーが発生します。

def sample_function(arg1, arg2):
    print(arg1, arg2)

sample_function('c', arg2='d') # 後方の引数のみキーワード指定
sample_function(arg1='c', 'd') # キーワード引数の後ろに位置引数を指定
# SyntaxError: positional argument follows keyword argument

引数の展開

また、関数呼び出し時に複数の位置引数やキーワード引数を指定することが可能で、関数側で自動的に引数が変数に展開されます。

位置引数をまとめて指定する
def 関数名(*リスト):
キーワード引数をまとめて指定する
def 関数名(**辞書):

以下のサンプルでは関数の呼び出し時に位置引数、キーワード引数をそれぞれまとめて指定しています。

def sample_function(arg1, arg2):
    print(arg1, arg2)
   

# 位置引数をまとめて指定する例
arglist = ["a", "b"]
sample_function(*arglist)


# キーワード引数をまとめて指定する例
argdict = {"arg1": "a", "arg2": "b"}
sample_function(**argdict)