Kebezaan Halus Python: "i = x" vs. "i = i x"
Dalam Python, pengaturcara sering menggunakan " =" sebagai singkatan untuk tugasan tambahan, mengharapkan ia berkelakuan sama dengan "i = i x." Walau bagaimanapun, andaian ini tidak selalu betul.
"i = x" menggunakan kaedah "__iadd__", manakala "i = i x" memanggil "__add__." Dalam kebanyakan kes, "__iadd__" dan "__add__" mengembalikan hasil yang setara. Walau bagaimanapun, ini boleh berbeza-beza berdasarkan objek yang dipersoalkan.
Untuk objek boleh ubah, "__iadd__" mengubah suai objek di tempatnya, manakala "__add__" mencipta tika baharu. Untuk objek tidak berubah, walau bagaimanapun, kedua-dua kaedah mengembalikan kejadian baharu.
Untuk objek boleh ubah, "__iadd__" berguna untuk mengubah suai objek di tempatnya, sekali gus mengekalkan ingatan. Contohnya:
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]
Bedakan ini dengan:
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
Dalam contoh terakhir, a dan b menjadi objek berbeza.
Dalam senario tertentu, "__add__" juga boleh memanggil "__radd__." Sebagai contoh, jika objek tidak melaksanakan "__add__", penterjemah boleh cuba menggunakan kaedah "__radd__" objek lain.
Ringkasnya, "i = x" dan "i = i x" ialah biasanya setara untuk objek boleh ubah. Walau bagaimanapun, untuk objek tidak berubah, "__iadd__" dan "__add__" mencipta gelagat yang berbeza. Memahami nuansa ini adalah penting untuk pengaturcaraan Python yang berkesan.
Atas ialah kandungan terperinci Bilakah Adakah `i = x` Berbeza daripada `i = i x` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!