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
Lepaskan: 2024-12-22 04:36:13
asal
457 orang telah melayarinya

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

Output

[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2]
Salin selepas log masuk

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