Pythonの**kwargs(キーワード引数)について
**kwargs
は、Pythonの関数定義で使われる非常に便利な機能です。関数に任意の数のキーワード引数(名前付き引数)を渡すために使用されます。kwargsは「キーワード引数」を意味し、**
はそれらを辞書として展開するという意味です。
**kwargsの基本的な使い方
関数に**kwargs
を使用すると、任意のキーワード引数を受け取ることができます。これらの引数は辞書形式で関数内に渡されます。
例1:**kwargsを使った関数の定義
この場合、出力は次のようになります。
ここで、kwargs
は関数に渡されたキーワード引数を含む辞書になっています。
解説
**kwargs
は複数のキーワード引数を辞書として受け取ることができます。関数呼び出し時に、何個でも引数を渡すことができ、それらが辞書として渡されます。
関数内でkwargs
を辞書として扱うことで、特定のキーにアクセスしたり、以下のようにループで全てのキーと値を処理したりできます。
例2:**kwargsで引数を処理する
出力
**kwargsの用途
- オプションの引数を受け取る場合
関数に必須ではない複数の引数を渡したい場合に便利です。ユーザーが任意の数の引数を渡すことができ、その引数を辞書形式で処理できます。 - 動的な引数の処理
引数の数や名前が事前にわからない状況で、関数が柔軟に引数を処理できるようにします。
可変長引数(*args)との違い
*args
は位置引数(非キーワード引数)をタプルとして受け取るのに対し、**kwargs
はキーワード引数を辞書として受け取ります。*args
は複数の引数を、**kwargs
は複数のキーワード引数を扱うために使用されます。
例3:*argと**kwargsを組み合わせた関数
出力
辞書を利用したパラメータの設定
**kwargs
を使用することで、デフォルト値を持つ引数を定義した関数に辞書形式でパラメータを渡すことができます。この方法は、必須でない引数が複数存在する場合に非常に便利です。
以下の例では、辞書に格納された値を**kwargs
を使用して関数に渡すことで、必要な引数のみを指定しています。
出力
必須の変数名に該当するものが辞書にない場合はエラーとなります。
出力
必須でない引数だけを**kwargs
で渡すこともできます。
出力
個人的には関数側で受け取る引数を明示的に記載し、辞書を使用してパラメータを渡すこちらのほうが、関数がどのような引数を受け取るのかが明確になり、可読性が向上するため好ましいと考えています。
Pydanticにおける**kwargsを使用した代入
以下のように、Pydantic
モデルへ**kwargs
を使ってデータを代入できます。この手法は、特に外部データソースからのデータを受け取る場合に便利です。
上記のuser = User(**src_dict)
は次のコードと同じになります。
実行例
なお、必須のフィールドに該当するキーが辞書に存在しない場合、エラーが発生します。
**kwargsのまとめ
**kwargs
は、関数に任意の数のキーワード引数を渡すための機能で、これらの引数は辞書として関数内でアクセスできる- 柔軟性が高く、複数のオプション引数を扱う場合や、引数の名前や数が動的に変わる場面で役立つ