====================================== 6:リストや辞書をデフォルト引数にしない ====================================== Pythonのデフォルト引数は便利な機能ですが、使ううえでの罠があります。 次の例のようにプログラムを書いたことはありませんか? 具体的な失敗 =================== .. code:: python def foo(values=[]): values.append("Hi") return values 引数 ``values`` をデフォルトで空のリストにしたい場合に ``values=[]`` と書いてはいけません。 .. omission:: ベストプラクティス ================== 更新可能(mutable)な値はデフォルト引数に指定してはいけません。 リスト、辞書、集合をデフォルト引数にしてはいけないと覚えておきましょう。 デフォルト引数に ``None`` を設定しておいて、関数内で ``None`` の場合に空のリストや辞書を指定しましょう。 .. code:: python def foo(values=None): if values is None: values = [] values.append("Hi") return values これで ``foo()`` を何回呼び出しても常に ``["Hi"]`` が返ります。