Python でのデフォルト パラメータの落とし穴の回避
Python では、空のリストをデフォルト パラメータとして使用したくなる場合があります。ただし、デフォルト パラメーターの早期バインディングが原因で、予期しない動作が発生する可能性があります。
次のような関数について考えてみましょう。
def my_func(working_list=[]): working_list.append("a") print(working_list)
最初は、デフォルト パラメーターは期待どおりに機能します。ただし、後続の呼び出しでは同じリストが更新され続けるため、呼び出しごとに出力されるリストが増加します。
これを回避するには、関数本体でデフォルト パラメーターの存在を明示的にテストし、次の場合は新しい空のリストを割り当てます。必要:
def my_func(working_list=None): if working_list is None: working_list = [] working_list.append("a") print(working_list)
または、ワンライナー:
working_list = [] if working_list is None else working_list
余談: PEP 8 では、None のようなシングルトンとの比較には is None を使用することを推奨しています。誤った結果が生じる可能性があるため、== None の使用は避けてください。
以上がPython 関数でデフォルトのパラメーターを使用するときの予期しない動作を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。