ホームページ >バックエンド開発 >Python チュートリアル >Python 関数の変更可能なデフォルト パラメーターによる予期せぬ動作を回避するにはどうすればよいですか?

Python 関数の変更可能なデフォルト パラメーターによる予期せぬ動作を回避するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-08 05:36:10234ブラウズ

How Can I Avoid Unexpected Behavior with Mutable Default Parameters in Python Functions?

Python の初期バインドされたデフォルト パラメーター: よくある落とし穴の回避

Python でデフォルト パラメーターを使用する場合は、潜在的な可能性を認識することが重要です早期バインディングによって引き起こされる問題。可変データ構造 (リストなど) に初期化されたパラメータなど、事前にバインドされたデフォルト パラメータは、関数が複数回呼び出されるときに予期しない動作をする可能性があります。

次の関数例を考えてみましょう:

def my_func(working_list=[]):
    working_list.append("a")
    print(working_list)

この関数を初めて呼び出すと意図したとおりに空のリストが初期化されますが、後続の呼び出しでは同じリストが更新されます。これにより、呼び出しごとにリストが増大するため、意図しない動作が発生する可能性があります。

この問題を回避するには、変更可能なデフォルト パラメーターに None のデフォルト値を指定し、関数本体内で明示的にチェックすることをお勧めします。サンプル関数を変更する方法は次のとおりです。

def my_func(working_list=None):
    if working_list is None:
        working_list = []

    working_list.append("a")
    print(working_list)

デフォルト値を None に設定し、明示的にテストすることで、関数の呼び出しごとに新しい空のリストが作成され、関数が期待どおりに動作することが保証されます。 .

追加の考慮事項

PEP 8 ガイドラインによれば、 is または を使用します。 None との比較ではありません。== または != よりも優先されます。これにより、明確さが確保され、潜在的なエラーのリスクが軽減されます。

コード内で予期せぬ問題が発生しないように、デフォルト パラメーターを使用する場合は、これらのガイドラインに留意してください。

以上がPython 関数の変更可能なデフォルト パラメーターによる予期せぬ動作を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。