Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Python = Operator Berkelakuan dengan Senarai dan Kaedah __iadd__ dan __add__ mereka?

Bagaimanakah Python = Operator Berkelakuan dengan Senarai dan Kaedah __iadd__ dan __add__ mereka?

DDD
Lepaskan: 2025-01-01 04:32:09
asal
768 orang telah melayarinya

How Does Python's  = Operator Behave with Lists and Their __iadd__ and __add__ Methods?

Operator Tugasan = pada Senarai Didedahkan

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.

Pengubahsuaian Di Tempat dengan __iadd__

Untuk senarai, jenis boleh ubah, Python menyediakan kaedah __iadd__. Apabila menemui =, Python memanggil __iadd__ pada senarai, membenarkan ia bermutasi dan menambah elemen.

Penciptaan Objek Baharu dengan __add__

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

Contoh dan Output

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)
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
  • Untuk foo, kedua-duanya __iadd__ dan __add__ tidak ditakrifkan. Oleh itu, = mencipta senarai baharu dan menetapkannya kepada atribut bar, yang dikongsi antara semua kejadian.
  • Untuk foo2, __add__ ditakrifkan tetapi __iadd__ tidak. Akibatnya, = mencipta senarai baharu, memberikannya kepada atribut bar tanpa mengubah suai senarai kongsi.

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan