Dalam Python, operator = mempunyai fungsi yang berbeza bergantung pada jenis objek yang digunakan. Apabila digunakan pada senarai, ia menimbulkan beberapa gelagat yang tidak dijangka yang boleh dijelaskan dengan memahami kaedah khas asas yang dipanggilnya.
Secara amnya, = cuba menggunakan kaedah khas __iadd__ untuk penambahan di tempat. Jika tiada, ia menggunakan __add__ sebaliknya.
Untuk senarai, jenis boleh ubah, Python menyediakan kaedah __iadd__. Apabila menemui =, Python memanggil __iadd__ pada senarai, membenarkan ia bermutasi dan menambah elemen.
Jika senarai tidak mempunyai kaedah __iadd__, Python lalai untuk __tambah__. Kaedah ini mencipta senarai baharu dan bukannya mengubah suai yang asal. Akibatnya, = berkelakuan seolah-olah anda telah menetapkan senarai baharu menggunakan =.
Merujuk contoh kod dalam soalan:
class foo: bar = [] def __init__(self, x): self.bar += [x] class foo2: bar = [] def __init__(self, x): self.bar = self.bar + [x] f = foo(1) g = foo(2) print(f.bar) print(g.bar) f.bar += [3] print(f.bar) print(g.bar) f.bar = f.bar + [4] print(f.bar) print(g.bar) f = foo2(1) g = foo2(2) print(f.bar) print(g.bar)
OUTPUT:
[1, 2] [1, 2] [1, 2, 3] [1, 2, 3] [1, 2, 3, 4] [1, 2, 3] [1] [2]
Dengan memahami perbezaan antara __iadd__ dan __add__, anda boleh menjangka gelagat = pada senarai, menghalang perkara yang tidak dijangka kejutan.
Atas ialah kandungan terperinci Bagaimanakah Python = Operator Berkelakuan dengan Senarai dan Kaedah __iadd__ dan __add__ mereka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!