Rumah > pembangunan bahagian belakang > Tutorial Python > Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam Python?

Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam Python?

Susan Sarandon
Lepaskan: 2024-12-08 00:50:16
asal
886 orang telah melayarinya

When Do `i  = x` and `i = i   x` Produce Different Results in Python?

Apabila Tugasan dan Pembesaran Berbeza: Meneroka "i = x" lwn. "i = i x"

Penggunaan operator = dalam Python boleh membawa kepada tingkah laku yang tidak dijangka dalam senario tertentu. Mari kita periksa perbezaan antara i = x dan i = i x untuk memahami apabila ia menyimpang.

Memahami Lebihan Operator

Pengendali = memanggil iadd kaedah jika wujud, atau kaedah tambah jika iadd tidak tersedia. Sebaliknya, pengendali terutamanya memanggil kaedah add.

Mutable vs. Immutable Object

Gelagat = bergantung pada sama ada objek berada yang ditetapkan boleh berubah (boleh diubah) atau tidak berubah (tidak boleh diubah). Untuk objek tidak berubah, kedua-duanya = dan buat contoh baharu. Walau bagaimanapun, iadd mengubah suai objek asal dan memberikannya kembali kepada nama pembolehubah, menimpa rujukan sebelumnya.

Contoh: Senarai

Untuk menggambarkan perbezaannya, pertimbangkan kod berikut:

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]
Salin selepas log masuk

Memandangkan senarai adalah boleh ubah, = mengubah suai b pada tempatnya, yang mempengaruhi a kerana kedua-dua pembolehubah merujuk senarai yang sama.

Sekarang, pertimbangkan:

a = [1, 2, 3]
b = a
b = b + [1, 2, 3]
print(a)  # [1, 2, 3]
print(b)  # [1, 2, 3, 1, 2, 3]
Salin selepas log masuk

Dalam kes ini, b = b [1, 2, 3] mencipta senarai baharu, meninggalkan senarai yang tidak berubah. Ini kerana memanggil kaedah tambah, yang mengembalikan tika baharu.

Pengendalian Pengecualian untuk ' ='

Dalam kes di mana x. __add__ tidak dilaksanakan atau mengembalikan NotImplemented, dan x dan y mempunyai jenis yang berbeza, operator akan kembali pada y.__radd__ jika ia wujud. Oleh itu, perkara berikut adalah bersamaan:

foo_instance += bar_instance
Salin selepas log masuk
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)
Salin selepas log masuk

Peningkatan Subkelas

Apabila foo_instance dan bar_instance adalah daripada jenis yang berbeza, dan bar_instance ialah subkelas foo_instance, bar_instance.__radd__ akan dicuba sebelum foo_instance.__add__. Ini membolehkan subkelas mengatasi kelakuan kelas super mereka.

Kesimpulan

Memahami perbezaan antara i = x dan i = i x adalah penting untuk mengelakkan hasil yang tidak dijangka dalam pengaturcaraan Python . Dengan mengetahui masa dan cara pengendali ini berkelakuan berbeza, anda boleh memanipulasi kedua-dua objek tidak berubah dan boleh ubah dengan berkesan.

Atas ialah kandungan terperinci Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan