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

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

DDD
リリース: 2024-12-10 15:03:10
オリジナル
668 人が閲覧しました

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

Python のアーリー バインディングにおけるデフォルト パラメーターの問題点を回避する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート