defでの引数のデフォルト値(初期値)の設定方法についてまとめています。
defでの関数の定義の仕方と呼び出し方法については前回の記事でまとめていますので、そちらをご参照ください。
defでの引数が複数ある場合
defで引数が複数ある場合、次のようにコードを書きます。
def 関数名(引数1、引数2、引数3・・・・引数n):
関数の定義
と引数間をカンマで区切っていけば大丈夫です。実際の例は次のようになります。
def money(period,amount,rate):
'''
毎月amount万円、年利rate%(複利)、period年目の投資結果
'''
return 12*amount*period*(1+rate/100)**period
a = money(1,1,7)
b = money(5,1,7)
c = money(10,1,7)
print(a,b,c)
【実行結果】
12.84 84.15 236.06引数にデフォルト値(初期値)を1つ設定する場合
関数を定義するコードに引数名=デフォルト値(初期値)とすることで引数のデフォルト値(初期値)を設定できます。
先程の例で年利(引数rate)は基本的に7%で考えたいという時に、初期値を7で設定する事ができます。
実際のコード例です。
def money(period,amount,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1,1)
b = money(5,1)
c = money(10,1)
print(a,b,c)
【出力結果】
12.84 84.15 236.06このように引数の3つ目(引数rate)を入力せずに実行すると、関数の定義で設定したデフォルト値(初期値)である7が自動で反映されます。
もちろんデフォルト値(初期値)なので、別の値で実行したい時は引数rateの位置に別の値を入力すればOKです。
def money(period,amount,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1,1,10)
【実行結果】
13.2引数にデフォルト値(初期値)を2つ設定する場合
同様に引数2つにデフォルト値(初期値)を設定する事が可能です。
def money(period,amount = 1,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1)
b = money(5)
c = money(10)
print(a,b,c)
【実行結果】
12.84 84.15 236.06引数amountと引数rateの入力を省略しても、デフォルト値(初期値)が反映されていました。
ではここで、「引数amountだけデフォルト値(初期値)から変更したい。」もしくは「引数rateだけデフォルト値から変更したい。」という時はどうすればよいでしょうか。
一部の引数のみデフォルト値を変更したい場合(3つの引数のうち2つ目を変更する場合)
これまでの例で引数amountを変更したい場合は2つ方法があります。
① 関数にamount = 〇(数値)としてデフォルト値から変更する
② 1つ目の引数の後に,(カンマ)を入れて、数値を入力する。
では、実際のコードを見てみましょう。
①関数にamount = 〇(数値)としてデフォルト値から変更する場合(毎月amount万円、年利rate%、period年投資した場合)
def money(period,amount = 1,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1,amount = 5)
print(a)
【実行結果】
64.2投資した額:5*12=60、利子: 60*0.07 = 4.2、投資期間:1年、なので60+4.2=64.2と実行結果と一致しています。また、引数rateは省略されているので、デフォルト値(初期値)の1が反映されます。
②1つ目の引数の後に,(カンマ)を入れて、数値を入力する場合
def money(period,amount = 1,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1,5)
print(a)
【実行結果】
64.2こちらも先程と同じ結果を得ることができました。
一部の引数のみデフォルト値を変更したい場合(3つの引数のうち3つ目を変更する場合)
こちらも先ほどと同様2つの方法があります。ただし、②については制約があるので注意が必要です。詳細は後述します。
①関数にrate = 〇(数値)としてデフォルト値から変更する場合(毎月amount万円、年利rate%、period年投資した場合)
②1つ目、2つ目の引数の後に,(カンマ)を入れて、数値を入力する場合
①関数にrate = 〇(数値)としてデフォルト値から変更する場合(毎月amount万円、年利rate%、period年投資した場合
def money(period,amount = 1,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1,rate=10)
print(a)
【実行結果】
13.2引数amountは省略されているので、デフォルトのamount = 1が反映されています。
②1つ目、2つ目の引数の後に,(カンマ)を入れて、数値を入力する場合
def money(period,amount = 1,rate = 7):
return 12*amount*period*(1+rate/100)**period
a = money(1,2,10)
print(a)
【実行結果】
26.42*12 = 24、24*0.10 = 2.4、24 + 2.4 = 26.4なので毎月2万円(引数amount)、年利10%(引数rate)、1年投資(引数period)した結果が正しく出力されている事がわかりました。
ここで、注意が必要なのはrateの値をrate = 〇〇としない場合には、必ず引数periodと引数amountの値の入力が必要という事です。もし、amountの値を省略して
a = money(1,10)
としてしまうと、引数amountの値が10、引数rateの値が省略された。と認識されてしまいます。(引数rateは省略されたものとして、デフォルト値で実行されます。)

コメント