Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Python's = Operator Berbeza Mempengaruhi Senarai Bergantung pada __iadd__ dan __add__?

Bagaimanakah Python's = Operator Berbeza Mempengaruhi Senarai Bergantung pada __iadd__ dan __add__?

Susan Sarandon
Susan Sarandonasal
2024-12-22 04:36:13368semak imbas

How Does Python's  = Operator Differentially Affect Lists Depending on __iadd__ and __add__?

Bagaimana Operator = Beroperasi pada Senarai dalam Python

Operator = dalam Python mempamerkan tingkah laku yang tidak dijangka apabila digunakan pada senarai. Tingkah laku ini dikaitkan dengan perbezaan antara iadd dan add kaedah khas.

iadd vs tambah

  • __iadd__': Tambahan di tempat; memutasi objek yang diambil tindakan.
  • __add__': Mengembalikan objek baharu; digunakan untuk operator standard.

Gelagat pada Senarai

Apabila = digunakan pada senarai dengan kaedah iadd, senarai diubah suai di tempatnya. Jika iadd tidak ditakrifkan, tambah akan digunakan, menghasilkan senarai baharu.

Contoh

Pertimbangkan perkara berikut kod:

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]

Penjelasan

  • foo melaksanakan __iadd__, jadi = mengubah suai f.bar, menyebabkannya menjejaskan semua keadaan foo.
  • foo2 kekurangan __iadd__, jadi = mencetuskan __add__, mengembalikan senarai baharu yang menggantikan f.bar.
  • foo2 mengekalkan senarai bar asalnya, manakala foo mengubah suainya secara global.

Kesimpulan

Gelagat = pada senarai bergantung pada sama ada ia memanggil iadd atau add__. Pengubahsuaian di tempat berlaku dengan __iadd__, manakala __add mencipta senarai baharu.

Atas ialah kandungan terperinci Bagaimanakah Python's = Operator Berbeza Mempengaruhi Senarai Bergantung pada __iadd__ dan __add__?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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