<一覧に戻る

Pythonのデフォルト引数

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のデフォルト引数の基本・メリット・注意点を解説しました。

  • デフォルト引数を使うと、関数の引数を省略でき、コードが簡潔で柔軟になる
  • デフォルト引数を指定すると、どの引数が省略可能かが明示され、可読性が向上する
  • ただし、リストや辞書などのミュータブルなオブジェクトをデフォルト値にすると予期しない挙動になる
  • その場合は None を使って、関数内で新しいオブジェクトを作るのが安全な方法

デフォルト引数はPythonを使いこなす上で欠かせないテクニックです。 正しく理解して使えば、プログラムの可読性・保守性が大きく向上します。

出力結果: