Pythonの関数-引数に初期値(デフォルト値)を設定する
記事の内容
実用的なプログラミングを書いていると、「ほとんどの場合はこの値で十分なんだけど、場面に合わせて値を変えられる機能を関数にもたせたい」といった場面に遭遇します。
このような場合は、関数の引数に初期値(デフォルト値)を設定しておくことで対応します。引数にデフォルト値を設定すると、関数呼び出しの際に引数へのデータ渡しを省略できます。つまり、細かい設定が必要な時だけ、関数呼び出しの際にデフォルト値を書き換えればよくなります。
この記事では、Pythonの関数の引数にデフォルト値を設定する方法とその使い方について説明します。
***わからない用語があるときは索引ページへ***
1.デフォルト値が設定された関数を作成する
"func_ex4_1.py"は、変数x、a、b、cを引数にとり、二次関数
y = ax ** 2 + bx + c
の解yを返す関数です。xを必須の引数とし、a=1, b=0, c=0のデフォルト値を設定しています。
##func_ex4_1.py
##変数x、a、b、cを引数にとり、二次関数
##y = ax **2 + bx + c
##の解yを返す
def f(x, a=1, b=0, c=0):
y = a * x ** 2 + b * x + c
return y
##プログラム実行開始位置
##初期設定された引数へのデータ渡しを省略すると、初期設定が適用される
x = 3
print("x =", x)
##初期値が設定された引数は呼び出しのときに省略可能
##省略された引数には、初期値が適用される。
y = f(x)
print("x ** 2 =", y)
##関数を呼び出したときの
##引数と同じ順番でdefの引数の変数に渡される
y = f(x, 2)
print("2 * x ** 2 =", y)
y = f(x, 1, 1, 1)
print("x ** 2 + x + 1 =", y)
##一部だけ初期値を書き換えたいときは、
##defの変数に直接代入する。
y = f(x, c=5)
print("x ** 2 + 5 =", y)
##defの変数に直接代入して関数を呼び出す場合は、どんな順番で
##引数を渡してもよい
y = f(a=1, x=5, b=0, c=0)
print("5 ** 2 =", y)
書き方のルールについて、"func_ex4_1.py"のサンプルプログラムを使って順に説明していきます。
def部の引数に直接データを代入することによって、関数のデフォルト値を設定します。関数宣言の際、デフォルト値が設定されていない変数は、デフォルト値が設定されている変数よりも先に宣言する必要があります。これは、関数に渡す引数の順番があいまいになってしまうからです。デフォルト値が設定されている変数を、デフォルト値が設定されていない変数よりも先に宣言すると、文法エラーになります。func_ex4_1.pyの関数fでは、xが最初に宣言されなければなりません。
def f(x, a=1, b=0, c=0):
デフォルト値が設定されている引数は、関数呼び出しの際、引数へのデータ渡しを省略することができます。関数呼び出しの際にデータ渡しが省略された引数へは、デフォルト値がセットされます。この式では、引数a, b, cへのデータ渡しが省略されているため、それぞれのデフォルト値が適用されます。
y = f(x)
関数へのデータ渡しは、defの引数の変数の順番どおりに渡されます。
f(x, 2)の場合は、def部の変数xとaにそれぞれ、x(=3)と2が渡され、b, cへのデータ渡しが省略されます。
y = f(x, 2)
関数呼び出しの際、デフォルト値の一部だけを書き換えたい場合は、def部の書き換えたい引数の変数に、データを代入します。
y = f(x, c=5)
関数呼び出しの際、def部の変数に直接代入してデータ渡すこともできます。この引数の渡し方をする場合は、どんな順番で引数を渡してもかまいません。
y = f(a=1, x=5, b=0, c=0)
最後に、"func_ex4_1.py”の実行結果は以下のようになります。
x = 3
x ** 2 = 9
2 * x ** 2 = 18
x ** 2 + x + 1 = 13
x ** 2 + 5 = 14
5 ** 2 = 25