Rumah >pembangunan bahagian belakang >Tutorial Python >Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam 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]
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]
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
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)
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!