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

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

Linda Hamilton
リリース: 2024-12-15 14:08:10
オリジナル
528 人が閲覧しました

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

Python のデフォルト パラメーターに関する問題の回避

Python のデフォルト パラメーターを使用する場合、特に可変引数の場合、特定の複雑さが発生する可能性があります。これらの問題を防ぐには、デフォルト パラメーターの動作に対処することが重要です。

たとえば、次の関数を考えてみましょう:

def my_func(working_list=[]):
    working_list.append("a")
    print(working_list)
ログイン後にコピー

最初の呼び出しでは、空のリストのデフォルト パラメーターは期待どおりに機能します。 。ただし、後続の呼び出しでは予期しない動作が発生し、デフォルトのパラメーター (最初は空のリスト) が以前の実行から追加された要素を維持します。

この問題を解決し、関数呼び出しごとに新しい空のリストを作成するために、Python は 2 つのアプローチを提供します。 :

1.なしのテスト:

def my_func(working_list=None):</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if working_list is None: 
    working_list = []
working_list.append("a")
print(working_list)
ログイン後にコピー

2.条件付き代入:

def my_func(working_list=None):</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">working_list = [] if working_list is None else working_list
working_list.append("a")
print(working_list)
ログイン後にコピー

どちらのソリューションも、新しい空のリストは要素を追加する前に初期化されるため、各関数呼び出しが分離され、以前のリストからのデータの蓄積が防止されます。処刑

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

ソース:php.cn
前の記事:pytz で予期しないタイム ゾーン オフセットが表示されるのはなぜですか? それらを正しく処理するにはどうすればよいですか? 次の記事:「subprocess.Popen」を使用して Python でマルチプロセス パイプラインを効率的に作成するにはどうすればよいですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート