ホームページ  >  記事  >  バックエンド開発  >  Python のオブジェクト間でデフォルト値が共有されるのはなぜですか?

Python のオブジェクト間でデフォルト値が共有されるのはなぜですか?

王林
王林転載
2023-08-20 19:33:231120ブラウズ

Python のオブジェクト間でデフォルト値が共有されるのはなぜですか?

Python のデフォルト値の概念は、可変オブジェクトまたは不変オブジェクトの使用に基づいています。プログラミングの実践では、変更可能なオブジェクトをデフォルト値として使用しないことが最善です。問題を避けるために、代わりにデフォルト値として None を使用してください。数値、文字列、タプル、None などの不変オブジェクトは変化しません。辞書、リスト、クラス インスタンスなどの変更可能なオブジェクトの場合、変更により混乱が生じる可能性があります。

関数内の辞書の例と、その問題点とその修正方法を見てみましょう。

###質問###

関数があります。この関数では、パラメータとして辞書を使用し、デフォルト値を設定します。この関数が初めて呼び出されるとき、mydict には項目が 1 つだけ含まれます。 2 回目の呼び出しでは、foo() の実行開始時に mydict にはすでに 1 つの項目があったため、mydict には 2 つの項目が含まれます。

リーリー

私たちは多くの場合、関数呼び出しでデフォルト値を持つ新しいオブジェクトを作成することを期待します。しかし、そうではありません。デフォルト値は関数の定義時に一度だけ作成されます。上記の辞書の例のように、オブジェクトが変更された場合、後続の関数呼び出しでは変更されたオブジェクトが参照されます。

###解決###

可変オブジェクトをデフォルト値として使用する問題を解決するには、次のようにします -

リーリー

None などの不変オブジェクトを使用します -

リーリー

計算負荷の高い関数がある場合、1 つの手法は、関数の呼び出しごとに引数と結果の値をキャッシュし、同じ値が再度要求されたときにキャッシュされた値を返すことです。

これはメモ化と呼ばれ、次のようにして実現できます -

リーリー

以下は結果をキャッシュに保存します -

ああああ

以上がPython のオブジェクト間でデフォルト値が共有されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。