Python 可変長位置引数(*args)、可変長キーワード引数(**kwargs)

はじめに みなさんこんにちはALEXです。今回は可変長位置引数(*args)、可変長キーワード引数(**kwargs)について解説します。可変長引数とは以前ご紹介しました、位置引数、キーワード引数の使い方の一つで非常に便利な方法です。よく*argsとか**kwargs というものをご覧になったことがあるかと思いますが、今回はこの二つを学んでいただきます。

可変長位置引数(*args)

まず位置引数のコードを作ってみます。

以下のように表示されます。

これは前回の位置引数で学んだコードをよりシンプルにしたものです。ランチメニューのメイン料理を書いてみました。 さてこれに可変長位置引数というものを導入してみます。

これも同じように表示されます。

アスタリスク(*)を使ってargsという引数で()中の変数がひとつになっています。Pythonではアスタリスク(*)ひとつの文字が可変長引数を意味します。次に来る変数名は何でも良いのですが、このargsはPythonで慣習的に使われています。可変長引数のargsは要素みっつのイテレータですので、次の行のfor文で一つずつ取り出され表示されています。可変長引数なので引数の数は可変です。今回は3つですが、これをいくつにしても構いません。

可変長引数をタプルとして扱う

更にPythonの使い勝手を良くしている機能は、可変長引数をタプルとして扱うことができます。 以下のようにすることができます。
 
関数lunch_mainの()に可変長引数*argsをしていして、for文で変数を引き出します。次に3つの料理をタプルtに格納して、lunch_mainを実行します。()内の引数はアスタリスク+タプル名とします。
これも以下のように表示されます。
 

可変長キーワード引数(**kwargs)

次に可変長キーワード引数について学びましょう。ひとつキーワード引数のコードを作ります。

以下のように表示されます。

月曜日、水曜日、金曜日は日替わりランチを出すことにしたのでそのメニューを考えました。ただ、水曜日のメニューがあまり好評でなかったので、今週だけステーキに変更しました。これは前回に学んだ位置引数、キーワード引数をつかったものです。さてここに可変長キーワード引数を使ってみましょう。

 

可変長キーワード引数は辞書で扱う

これは以下のように表示されます。

キーワード引数がアスタリスクとkwargsででまとめられています。アスタリスク二つが可変長キーワード引数を意味します。このあとの引数名はPythonではkwargsが慣習的に使用されています。これを実行すると出力結果は辞書型で表示されていることに注目してください。この可変長キーワード引数は辞書として扱うことができます。 とすると、これはkeyとvlaueを取り出す形で以下のように書き換えることが可能です。

以下のように表示されます。

辞書を変数として使うことで更に次のように記述することができます。

これも以下のように表示されます。

dictという辞書を作り、関数の呼出時に**kwargsの位置に、この辞書dictを入れました。  

まとめ

Pythonでは複数の引数を使いて関数を定義することができます。位置引数はargsを、キーワード引数は*kwargsを一般的に使用します。それぞれタプル、辞書として使用することができます。 さらに、これらの引数はまとめて一つの関数の引数として利用することもできます。ただし、argsと*kwargsの順番は間違えないように注意する必要があります。