Pythonで関数を定義するとき、デフォルト引数を設定することができます。
デフォルト引数とは、あらかじめ引数に初期値を設定しておくことで、関数を呼び出す際にその引数を省略できる便利な仕組みです。
この機能を使うと、コードが短くなり、関数の使い勝手も大幅に向上します。特に初心者にとって「毎回すべての引数を入力しなくてもいい」という点は、Pythonを使いこなす上でとても助かるポイントです。
今回は、デフォルト引数の基本的な使い方から メリット、そして初心者がつまずきやすい注意点までを具体的なコード例とともに解説します。
デフォルト引数は、関数を定義する際に、引数名の後に = を書き、初期値を設定することで利用できます。
基本の構文は次の通りです。
def 関数名(引数名=デフォルト値):
処理内容
以下のサンプルコードを見てみましょう。
def greet(name="ゲスト"):
print(f"こんにちは、{name}さん!")
greet() # 引数を省略
greet("太郎") # 引数を指定
このコードでは、greet という関数に name という引数がありますが、デフォルト値として"ゲスト"が設定されています。
最初の呼び出しgreet()
では、引数を省略しているため、デフォルト値"ゲスト"が使用されて「こんにちは、ゲストさん!」と表示されます。
次の呼び出しgreet("太郎")
では、引数として "太郎" を渡しているので、結果は「こんにちは、太郎さん!」になります。
このように、デフォルト引数を設定しておくと「引数を渡さない場合」と「引数を渡す場合」の両方に柔軟に対応できるようになります。
Pythonのデフォルト引数には大きく3つのメリットがあります。
まず1つ目はコードの簡潔さです。省略可能な引数を持つことで、関数の呼び出しがシンプルになり、余計な記述を減らせます。
次に柔軟性の高さです。必要に応じて引数を指定して値を変更することもできますし、省略してデフォルト値を使うことも可能です。
そして3つ目はコードの可読性向上です。デフォルト引数を設定しておくと「この引数は指定しなくてもよい」という意図が明確になり、コードを読む人にとって分かりやすくなります。
例えば、Webアプリのログイン処理で「言語設定のデフォルトを日本語にする」といったケースでは、デフォルト引数を活用することで非常にスッキリとしたコードを書くことができます。
とても便利なデフォルト引数ですが、Python初心者がよくハマる落とし穴があります。 それは、デフォルト引数にミュータブル(変更可能)なオブジェクトを使う場合です。
Pythonでは、デフォルト引数は「関数が定義された時点」で一度だけ評価されます。そのため、リストや辞書などのミュータブルなオブジェクトをデフォルト値にすると、思わぬ動作になることがあります。
以下の例を見てみましょう。
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1)) # [1]
print(append_to_list(2)) # [1, 2]
print(append_to_list(3, [])) # [3]
このコードを実行すると、最初の呼び出しでは [1] が返り、2回目では [1, 2] が返ってきます。ここで驚くのは、2回目に呼び出したときに「新しいリスト」が作られたのではなく、1回目と同じリストが使われている点です。
その理由は、関数のデフォルト引数として指定したリストが、最初の定義時に固定され、呼び出しごとに再利用されているからです。3回目のappend_to_list(3, [])
のように明示的に新しいリストを渡した場合のみ、新しいリストが使われます。
この挙動は初心者にとって非常に混乱しやすく、「なぜ勝手に値が残っているのか?」という疑問を生みます。そのため、デフォルト引数にミュータブルなオブジェクトを使うのは避けるべきです。
リストや辞書をデフォルト値として使いたい場合は、デフォルトを None にして、関数内で新しいオブジェクトを生成するのが安全な方法です。
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
print(append_to_list(1)) # [1]
print(append_to_list(2)) # [2]
このように書くことで、関数を呼び出すたびに新しいリストが生成され、意図しない値の共有を防ぐことができます。これはPythonでよく使われる「安全なデフォルト引数の書き方」として、ぜひ覚えておきましょう。
今回は、Pythonのデフォルト引数の基本・メリット・注意点を解説しました。
デフォルト引数はPythonを使いこなす上で欠かせないテクニックです。 正しく理解して使えば、プログラムの可読性・保守性が大きく向上します。