defによる関数定義での位置引数、キーワード引数の使い方についてまとめています。
位置引数とは
位置引数とは、
キーワード引数以外の引数。
python公式ドキュメントより
となっています。なんのこっちゃという感じですが、実際に例を見てみましょう。
引数period、引数amount、引数rateの3つを用いて、投資結果を推測する関数を作ってみます。具体的には、毎月amount万円(引数amount)、period年間(引数period)積み立てて、利率がrate%(引数rate)という関数を作ります。
この関数を用いて毎月1万円、1年間の積み立て、利率7%の結果を見てみたいと思います。
def money(period,amount,rate):
return 12*amount*period*(1+rate/100)**period
a =money(1,1,7)
print(a)
【実行結果】
12.84上記のmoney(1,1,7)の引数1,1,7は関数定義された順番にそれぞれ対応します(period = 1、amount = 1、rate = 1)。このような引数を位置引数といいます。
このように全て順番通りに入力できれば問題ないのですが、順番を毎回覚えていないといけません。また、一部の定数はデフォルト値を設定しておきたいというような事があります。そういった時にはキーワード引数を使うようにしておくと便利です。
キーワード引数
キーワード引数とは、
関数呼び出しの際に引数の前に識別子がついたもの (例: name=) や、 ** に続けた辞書の中の値として渡された引数。
python公式ドキュメントより
引数名 = 〇〇などと引数の名前を指定して、値を渡す引数の事をいいます。
先ほどの例を少し変更して、キーワード引数の例をみてみましょう。
def money(period,amount,rate):
return 12*amount*period*(1+rate/100)**period
a = money(period = 1,amount = 1,rate = 7)
b = money(amount = 1,rate = 7,period = 1)
print(a,b)
【実行結果】
12.84 12.84引数の位置が変わっても正しく出力されました。
位置引数とキーワード引数を混在させた場合
位置引数とキーワード引数が混じっているとどうなるでしょう。
実際に例でみてみましょう。
def money(period,amount,rate):
return 12*amount*period*(1+rate/100)**period
a = money(1,amount = 1,rate =7)
b = money(1,rate = 7,amount = 1)
print(a)
print(b)
【実行結果】
12.84
12.84位置引数とキーワード引数が混在していても実行する事ができました。
ただし、位置引数とキーワード引数が混在する場合は、位置引数が先に指定され、その後にキーワード引数がこないといけません。そのため、位置引数より前にキーワード引数があるとエラーが発生します。
def money(period,amount,rate):
return 12*amount*period*(1+rate/100)**period
c = money(rate = 7,1,amount = 1)
print(c)
【エラーメッセージ】
SyntaxError: positional argument follows keyword argumentこれを次のように引数periodもキーワード引数で指定してやると、エラーが発生することなく、実行できます。
def money(period,amount,rate):
return 12*amount*period*(1+rate/100)**period
d = money(rate = 7,period = 1,amount = 1)
print(d)
【実行結果】
12.84
コメント