Eine kurze Einführung in die sequenzielle Zuweisung in Python (mit Beispielen)

不言
Freigeben: 2018-10-08 16:29:24
nach vorne
2989 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine kurze Einführung in die sequenzielle Zuweisung in Python (mit Beispielen). Ich hoffe, dass er Ihnen als Referenz dienen wird.

Die inkrementellen Zuweisungsoperatoren sind += und *=. Die spezielle Methode hinter += ist __iadd__. Wenn eine Klasse die Methode __iadd__ nicht implementiert, geht Python einen Schritt zurück und ruft sie auf __add__-Methode. Der Unterschied zwischen diesen beiden Methoden besteht darin, dass __iadd__ eine direkte Änderung ist und die Speicheradresse des ursprünglichen Werts nicht ändert, während die Methode __add__ ein neues Objekt erhält.

Betrachten Sie den folgenden Ausdruck:

a += b

Wenn a die Methode __iadd__ implementiert, wird a an Ort und Stelle geändert (die Speicheradresse bleibt unverändert). Wenn a die Methode __iadd__ nicht implementiert, ist die Wirkung des Ausdrucks a += b dieselbe wie bei a = a + b, wodurch ein neues Objekt generiert und a zugewiesen wird.

Im Allgemeinen implementieren veränderliche Sequenzen im Allgemeinen die __iadd__-Methode, sodass += eine In-Place-Addition ist, während unveränderliche Sequenzen diesen Vorgang überhaupt nicht unterstützen.

*= ist dasselbe wie +=, außer dass die spezielle Methode dahinter __imul__ ist.

a = [1, 2, 3]
b = [4, 5, 6]print("id(a) = %d" % id(a))
a += bprint("id(a) = %d" % id(a))

c = [1, 2, 3]print("id(c) = %d" % id(c))
c = c + bprint("id(c) = %d" % id(c))

d = (1, 2, 3)print("id(d) = %d" % id(d))
d *= 2print("id(d) = %d" % id(d))
Nach dem Login kopieren

Die laufenden Ergebnisse lauten wie folgt:

id(a) = 1298277978824
id(a) = 1298277978824
id(c) = 1298277978696
id(c) = 1298277978632
id(d) = 1298277972872
id(d) = 1298277136616
Nach dem Login kopieren

Versteht die inkrementelle Zuweisung von Schauen wir uns das von Leonardo Rochael auf der Python Brazil Conference 2013 erwähnte Rätsel an:

t = (1, 2, [30, 40])
t[2] += [50, 60]
Nach dem Login kopieren

A.t wird zu (1, 2, [30 , 40, 50, 60])

Da Tupel keine Zuweisung zu seinen Elementen unterstützt, wird eine TypeError-Ausnahme ausgelöst

Keines der oben genannten

Beides A und B sind richtig

Ich denke, viele Leute werden sich wie ich für B entscheiden, aber tatsächlich lautet die Antwort D. Führen Sie den Code auf der Konsole aus und die Ergebnisse sind wie folgt:

Zusammenfassung:

1. Wenn Sie wiederholte Spleißvorgänge durchführen Bei unveränderlichen Sequenzen ist die Effizienz sehr gering, da Sie jedes Mal eine neue Sequenz erstellen, dann die Elemente in der ursprünglichen Sequenz in die neue Sequenz kopieren und dann neue Elemente anhängen müssen.

2. Platzieren Sie keine veränderlichen Objekte in Tupeln.

3. Die inkrementelle Zuweisung ist keine atomare Operation. Wir haben gerade gesehen, dass sich der Wert von t dennoch ändert.

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in die sequenzielle Zuweisung in Python (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!