Pythonの関数は、コード内の異なる場所で繰り返し実行したいロジックを実装するために使用されます。
これらの関数には、関数の引数を介してデータを渡すことができます。
関数呼び出しで関数に引数を渡すだけでなく、Pythonの関数にデフォルトの引数値を設定することもできます。
これらのデフォルト値は、与えられた引数に明示的にパラメータ値を渡さなかった場合に、関数の引数に割り当てられます。
パラメータとは、関数の引数に実際に渡される値のことです。
この記事では、Python関数でデフォルト引数を使用する方法について見ていきます。
しかし、その前に、Pythonで関数を定義する方法と、関数の引数に明示的に値を渡す方法について見ていきます。
引数のない関数
引数を取らないPythonの関数を定義してみましょう。
def my_function():
print("This is a function without arguments")
上のスクリプトは my_function
という関数を定義しています。
この関数は引数を受け取らず、単に文字列を表示します。
次のスクリプトは my_function()
関数を実際にどのように呼び出すかを示しています。
my_function()
出力には、my_function()
関数によって画面に表示された単純な文が表示されているはずです。
This is a function without arguments
明示的な引数を持つ関数
それでは、関数の引数に複数の値を渡さなければならない簡単なPython関数を定義してみましょう。
もし、すべての関数引数に値を指定しなかった場合、エラーが表示されます。
以下は、例として使用する関数です。
def func_args(integer1, integer2):
result = integer1 + integer2
return result
上のコードでは、 integer1
と integer2
の 2 つの引数を持つ func_args()
という関数を作成しています。
この関数は、2つの引数で渡された値を足し算して、その結果を関数の呼び出し元に返します。
それでは、上の関数を2つの引数で呼び出してみましょう。
result = func_args(10, 20)
print(result)
上のスクリプトは func_args()
メソッドを2つの引数、つまり10と20で呼び出します。
出力には、これら二つの値の合計、すなわち30が表示されるはずです。
それでは、引数に値を渡さないで func_args()
メソッドを呼び出してみましょう。
result = func_args()
print(result)
出力では、次のようなエラーが表示されるはずです。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-3449c8e5e188 in <module
----> 1 result = func_args()
2 print(result)
TypeError: func_args() missing 2 required positional arguments: 'integer1' and 'integer2'
このエラーは非常に明確で、func_args()
への関数呼び出しには、2つの必要な位置引数、 integer1
と integer2
が欠けているのです。
このエラーは基本的に、 integer1
と integer2
の引数に関数呼び出しを通じて値を渡す必要があることを告げています。
それでは、引数の1つに値を渡して、何が起こるか見てみましょう。
result = func_args(10)
print(result)
今度は出力に、再び次のようなエラーが表示されるはずです。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-640ec7b786e1 in <module
----> 1 result = func_args(10)
2 print(result)
TypeError: func_args() missing 1 required positional argument: 'integer2'
このエラーの違いは、位置引数の1つ、つまり integer2
の値が見つからないということです。
つまり、デフォルトの引数値が設定されていない場合は、関数のすべての引数に明示的に値を渡さないとエラーが発生します。
もし、関数を呼び出すときに、引数の値があってもなくても関数を実行させたい場合はどうしたらよいでしょうか?ここでPython関数のデフォルト引数の出番です。
デフォルトの引数を持つ関数
Python関数のデフォルト引数とは、関数呼び出し時に明示的な値が引数に渡されない場合、デフォルトの値を取る引数のことです。
ここでは、デフォルト引数を1つ持つ関数を定義してみましょう。
def find_square(integer1=2):
result = integer1 * integer1
return result
上のスクリプトでは、関数 find_square()
にデフォルト引数として integer1
を1つ定義しています。
引数 integer1
のデフォルト値は 2 です。
引数 integer1
に値を与えて find_square()
メソッドを呼び出すと、 find_square()
関数はその値の二乗を返します。
そうでない場合、 find_square()
関数の integer1
引数に何も渡さなければ、 integer1
にはデフォルトの値、つまり 2 が代入され、関数は 2 の二乗、つまり 4 を返すことがわかります。
まず、引数として10を指定して find_square()
メソッドを呼び出してみましょう。
result = find_square(10)
print(result)
出力
100
上記のスクリプトを実行すると、find_square()
関数の引数 integer1
のデフォルト値 2 が値 10 によって上書きされ、関数は 10 の 2 乗である 100 を返します。
今度は、引数 argument1
に何も指定せずに find_square()
関数を呼び出してみましょう。
この場合、find_square()
関数は4を返すことがわかります。
なぜなら、find_square()
関数に値がない場合、以下のようにデフォルト値である2がfind_square()
関数の値として使用されるためです。
result = find_square()
print(result)
出力されます。
4
Pythonの関数は、デフォルトの引数を複数持つこともできます。
例えば、以下のスクリプトでは、関数は引数に渡された整数を加算します。
もし関数に整数値が一つも渡されなかった場合、デフォルトの引数は以下のようにそれぞれ2、4の値をとります。
def add_ints(integer1=2, integer2=4):
result = integer1 + integer2
return result
まず、引数なしで add_ints()
関数を呼び出してみましょう。
result = add_ints()
print(result)
出力されます。
6
関数の引数に何も渡さなかったので、デフォルトの引数値、つまり 2 と 4 が一緒に加算されています。
それでは、add_ints()
関数に自分自身の値を2つ渡してみましょう。
result = add_ints(4, 8)
print(result)
出力されます。
12
予想通り、4と8が足されて12が返されました。
Pythonの関数は同時に通常の(明示的な)引数とデフォルトの引数を持つことができます。
関数 take_power()
を作ってみましょう。
この関数は、第1引数の値を第2引数の値のべき乗に引き上げた結果を返します。
def take_power(integer1, integer2=2):
result = 1
for i in range(integer2):
result = result * integer1
return result
まず、引数を1つだけ渡してみましょう。
result = take_power(3)
print(result)
出力は
9
上のスクリプトでは、take_power()
関数の integer1
引数に 3 が渡されています。
デフォルトの引数 integer2
には何も指定されていません。
したがって、デフォルトの値である 2 が 3 のべき乗に使用され、出力には 9 が表示されます。
それでは、take_power()
関数に2つの値を渡してみましょう。
result = take_power(3, 4)
print(result)
出力には、3の4乗、つまり81が表示されます。
注意しなければならないのは、デフォルトの引数を持つパラメータの後に、デフォルトの引数を持たないパラメータを続けることはできない、ということです。
次の関数を例にとって考えてみましょう。
def take_power(integer1=2, integer2):
result = 1
for i in range(integer2):
result = result * integer1
return result
この関数を呼び出そうとすると、最初の引数にはデフォルトがありますが、2番目の引数にはないため、エラーになります。
result = take_power(3, 4)
print(result)
このコードを実行すると、次のようなエラーになります。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-640ec7b786e1 in <module
----> 1 def take_power(integer1=3, integer2):
2 result = 1
SyntaxError: non-default argument follows default argument