代入と拡張が異なる場合: "i = x" と "i = i x" の比較
での = 演算子の使用Python は、特定のシナリオで予期しない動作を引き起こす可能性があります。 i = x と i = i x の違いを調べて、いつ発散するかを理解しましょう。
演算子のオーバーロードを理解する
= 演算子は iadd メソッド (存在する場合)、または add メソッド (存在する場合) iadd は使用できません。対照的に、演算子は主に add メソッドを呼び出します。
可変オブジェクトと不変オブジェクト
= の動作は、オブジェクトがassign は可変 (変更可能) または不変 (変更不可) です。不変オブジェクトの場合は、 = と新しいインスタンスを作成します。ただし、iadd は元のオブジェクトを変更して変数名に割り当て直し、以前の参照を上書きします。
例: Lists
違いについては、次のコードを考慮してください。a = [1, 2, 3] b = a b += [1, 2, 3] print(a) # [1, 2, 3, 1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
add メソッドを呼び出し、新しいインスタンスを返すためです。
Exception Handling for ' ='
x の場合。 __add__ が実装されていないか、NotImplemented を返し、x と y の型が異なる場合、演算子は y.__radd__ が存在する場合はそれにフォールバックします。したがって、以下は同等です:foo_instance += bar_instance
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)
サブクラスのオーバーライド
foo_instance と bar_instance の型が異なり、bar_instance が foo_instance のサブクラスである場合、 bar_instance.__radd__ はその前に試行されますfoo_instance.__add__.これにより、サブクラスがスーパークラスの動作をオーバーライドできるようになります。結論
Python プログラミングで予期しない結果を回避するには、i = x と i = i x の違いを理解することが重要です。 。これらの演算子がいつどのように異なる動作をするかを知ることで、不変オブジェクトと可変オブジェクトの両方を効果的に操作できます。以上がPython で「i = x」と「i = i x」が異なる結果を生成するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。