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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-16 09:57:18676ブラウズ

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

意図しない変更を避けるためのデフォルト パラメーターの管理

Python では、デフォルト パラメーターが変更可能なオブジェクトである場合、予期しない動作が発生することがあります。たとえば、関数のデフォルト パラメーターとして空のリストを使用すると、リストは以前の呼び出しで追加された古いデータを「記憶」する可能性があります。

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

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

初めて呼び出すと、デフォルトのリストが作成され、「a」が追加されます。ただし、後続の関数呼び出しでは同じリストが更新され続けるため、意図しない動作が発生します。この問題に対処するには、関数が呼び出されるたびに新しい空のリストが使用されるようにする必要があります。

1 つの方法は、デフォルトのパラメーターを明示的に None に設定し、関数内でそれを確認することです。

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

    # alternative syntax:
    # working_list = [] if working_list is None else working_list

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

このメソッドは、明示的な引数なしで関数が呼び出されたときに、新しい空のリストが確実に作成されるようにします。

あるいは、リストを作成してデフォルトのパラメータに割り当てる方法の理解:

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

このアプローチでは、呼び出しごとに新しい空のリストも効果的に生成されます。

Python ドキュメントでは、デフォルトとして None を使用することを推奨しています。パラメータを使用して明示的にチェックします。 None との比較は、PEP 8 ガイドラインに従って、「is」または「is not」演算子を使用して行う必要があります。

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

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