Python でデフォルト パラメーターを使用する場合は、アーリー バインディングに注意することが重要ですこの動作は、特に変更可能なデフォルト引数の場合、予期しない結果につながる可能性があります。この記事では、この問題に対処し、新しい空のリストをデフォルトのパラメータとして一貫して使用する関数を作成するための解決策を提供します。
次の点を考慮してください。 function:
def my_func(working_list=[]): working_list.append("a") print(working_list)
この関数が明示的な引数なしで初めて呼び出されるとき、Python は新しい空の関数を作成しますlist を working_list のデフォルト値として使用します。ただし、明示的な引数を指定しない後続の呼び出しでは、最初の呼び出しで作成されたのと同じリストが使用されるため、リストが累積的に更新されます。
Toこの動作を回避するには、None をデフォルトのパラメーターとして使用し、関数本体内で明示的にテストすることをお勧めします。これは次のように実現できます。
def my_func(working_list=None): if working_list is None: working_list = [] # alternative: # working_list = [] if working_list is None else working_list working_list.append("a") print(working_list)
デフォルトのパラメータを None に設定すると、明示的な引数なしで関数が呼び出されるたびに、新しい空のリストが作成されます。
< h3>その他の考慮事項
Python ドキュメントでは、None との比較に is None を使用することを推奨しています。これは PEP 8 に従って推奨されるスタイルであり、None などのシングルトンとの比較に等価演算子 (== および !=) を使用しないことを推奨しています。
以上がPython の変更可能なデフォルト引数による予期せぬ動作を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。