前回は特殊な引数であるデフォルト引数について確認しました。今回も同様に特殊な引数のうちの一つであるキーワード引数についてわかりやすく解説いたします。
今までの引数について・・・位置引数とは
今まで何気なく使用してきた引数は実は位置引数と呼ばれるものです。以下の関数を見てください
def TashiKake (num1 , num2 , num3) :
print ( (num1 + num2) * num3)
上記の関数を以下のような形で呼び出したとします。
TashiKake( 2 , 3 , 4)
すると計算結果では ( 2 + 3 ) * 4 で 20が出力されるはずです。また呼び出し側の順番を以下のように変えます。
TashiKake( 4 , 3 , 2)
すると計算結果では ( 4 + 3) * 2 で 14が出力されます。このように位置引数は呼び出し側の順番に沿って関数で定義した引数に渡されていきます。なお、関数側で定義する引数は仮引数といいますが、ワードが増えて大変なので今回は普通に引数として扱います。

キーワード引数とは
それでは今回の肝となるキーワード引数についてですが、キーワード引数は関数定義に記載されている引数名を、呼び出しの際に明示的に書くことで、引数の順番が関係なく、指定した引数名に値を渡すことができる引数です。
例えば上記のTashikake関数を例に以下のように呼び出すことができます。
Tashikake(num2 = 4 , num1 = 2 , num3 = 3)
上記のように呼び出した場合、指定された引数名にそれぞれ値が入ります。そのため、計算結果は
( 2 + 4 ) * 3 = 18 となります。以下のように順番を変えても同じ結果になります。
Tashikake(num1 = 2 , num3 = 3 , num2 = 4)
このようにキーワード引数は、明示的に関数の定義された引数名を呼び出した場合、対応する引数に対してデータが渡る動作になります。

キーワード引数と位置引数を明確に定義する
関数の定義において、位置引数として使われるのか、キーワード引数として使われるのかは呼び出し側に影響するので関数側からは認識することはそのまま定義するのではできません。そこで、マーカーを使って関数側でキーワード引数なのか位置引数なのかを定義します。
位置引数のマーカー
位置引数のマーカーは “/(スラッシュ)” です。このマーカーはマーカーの前の引数を位置引数として定義し、マーカーの後ろを位置引数、もしくはキーワード引数として定義します。なお、Colabだとなぜか位置引数のマーカーが使えなかったりするので、確認する際は面倒ですがファイルを作成してコマンドプロンプトから実行してみてください。
キーワード引数のマーカー
キーワード引数のマーカーは “*(アスタリスク)” です。このマーカーはマーカーの前の引数を位置引数、もしくはキーワード引数として定義し、マーカーの後ろの引数をキーワード引数として定義します。
上記をまとめると以下のようになります。

★ “/(スラッシュ)” の前は位置引数、
★ “/(スラッシュ)” と “*(アスタリスク)” の間はキーワード引数もしくは位置引数
★ “*(アスタリスク)”の後ろはキーワード引数
キーワード引数と位置引数の順番について
キーワード引数にもデフォルト引数と同様に優先順位があります。関数側ではマーカーを使用して明記する場合は上記のような順番になりますが、そうでない場合は位置引数もしくはキーワード引数の識別は呼び出し側に影響するので、呼び出し側での順番を注意しなくてはなりません。
位置引数はすべての引数において優先順位が高いのではじめに指定し、位置引数の指定が終わったら残った引数に対してキーワード引数を指定することができます。

キーワード引数として呼び出した後に位置引数を使用しようとするとエラーになります。

キーワード引数を使用した例
それでは最後に、キーワード引数と位置引数を利用した関数の例を確認します。
せっかくなのでマーカーを用いて定義します。
1 2 3 4 5 |
def calcSquare(side1, /, side2, *, height): print(str((side1 + side2) * height) + "㎤") calcSquare( 2 , 4 , height=10) |
いい例が思い浮かびませんでしたが立方体の体積を求める関数を作ってみました。ご自身で利便性のありそうな関数を作ってみるとよりいいコーディングができるかもしれません
今回はここまでです。
お疲れ様でした。
コメント