【Python】可変長引数「**kwargs」(辞書型)を関数で使う

Pythonでは、関数の引数に可変長引数 「**kwargs」を使うことができます。

可変長引数とは長さの決まっていない引数のことです。同じく可変長引数の「*args」がありますが、「*args」はタプルで 「**kwargs」は辞書型(dictionary)になります。

  • **kwargs・・・辞書型(dictionary)
  • *args・・・リスト型(list)

今回は、Pythonで関数の引数の使い方(可変長引数 **kwargs)を解説します。

可変長引数「**kwargs」を関数で使う

可変長引数「**kwargs」

Pythonの関数の引数には可変長引数「**kwargs」があります。

この可変長引数というのは、可変長という名前からもわかるとおり、長さが決まっていないという意味です。長さが決まっていない引数のことです。

辞書型の可変長引数を使う場合は「**」(アスタリスクを2つ)を使います。Pythonでは変数名を形式的に「kwargs」とします。

変数名は「kwargs」でなくてもいいのですが、「kwargs」を使うのが一般的なので、引数としては「**kwargs」となります。

「**kwargs」のデータ型は可変長の辞書型(dictionary)になります。

Pythonで可変長ではない引数の指定の仕方はこちらを参照してください。

参考ページPythonの関数の引数の使い方

辞書型はこちらを参照してください。

参考ページPython 辞書型(dictionary)の使い方(追加・登録・削除)

可変長引数「**kwargs」を関数で使う

# 可変長引数(辞書型)を使う関数
def get_list(**kwargs):
    for pg_key, pg_val in kwargs.items():
        print(pg_key, pg_val)
# 関数呼び出し 
get_list(A01 = 'python', A02 = 'java', A03 = 'c#')

#[結果] A01 python
#[結果] A02 java
#[結果] A03 c#

関数「get_list」の引数を可変長引数「**kwargs」にしました。

関数を呼び出す側では、「get_list」の引数に「キー=セット」と書き、キーと値をセットにしました。

このように辞書の要素数が決まっていないときには、可変長引数「**kwargs」が有効に使えますね。

可変長引数「**kwargs」を通常の引数と同時に使う

# 可変長引数と通常の引数を使う関数
def get_list(i, **kwargs):
    cnt = 0
    for pg_key, pg_val in kwargs.items():
        cnt += 1
        if i < cnt:
            print(pg_key, pg_val)
# 関数呼び出し 
get_list(2, A01 = 'python', A02 = 'java', A03 = 'c#')

#[結果] A03 c#

Pythonで可変長引数と通常の引数を同時に関数で使用する場合は、通常の引数を先に書き、可変長引数を後に書きます。

この関数では「第一引数の数値」より大きな要素数を返す関数です。

関数の呼び出し側では「get_list(2, A01 = ‘python’, A02 = ‘java’, A03 = ‘c#’)」と書きました。第一引数の「2」より大きな要素である「A03 c#」が取得できました。

可変長引数「**kwargs」の後に通常引数は使えない

def cul_num(**kwargs, i):
    num = sum(kwargs)
    if i > num:
        return i
    else:
        return num
# 関数呼び出し 
cul = cul_num(20, 1, 2, 3, 4, 5) 
print(cul) 
#[結果] SyntaxError: invalid syntax

先ほどの関数の引数を入れ替えてみました。可変長引数を第二引数にするとエラーになりました。

可変長引数と通常引数の順番は先に可変長引数を指定する必要があります。可変長なので長さが確定していないものを先にすると2つ目の引数と区別できなくなりますからね。

以上、Python 関数の引数の使い方(可変長引数 **kwargs)でした。

 

コメント