Warum gibt es keine ++
y --
Operatoren in Python?
Antworten
Zu viele Anzeigen?Der Grund dafür könnte sein @GlennMaynard betrachtet die Angelegenheit im Vergleich zu anderen Sprachen, aber in Python macht man die Dinge auf die Python-Art. Es ist keine Frage des "Warum". Es ist da und man kann Dinge mit dem gleichen Effekt tun mit x+=
. Unter Das Zen der Python ist sie gegeben: "Es sollte nur einen Weg geben, ein Problem zu lösen". Mehrere Möglichkeiten sind großartig in der Kunst (freie Meinungsäußerung), aber lausig in der Technik.
Eine bessere Frage wäre vielleicht, warum es diese Operatoren in C gibt. K&R nennt Inkrement- und Dekrementoperatoren "ungewöhnlich" (Abschnitt 2.8, Seite 46). In der Einleitung werden sie als "prägnanter und oft effizienter" bezeichnet. Ich vermute, dass die Tatsache, dass diese Operationen immer bei der Manipulation von Zeigern auftauchen, auch eine Rolle bei ihrer Einführung gespielt hat. In Python wurde wahrscheinlich entschieden, dass es keinen Sinn macht, Inkremente zu optimieren (ich habe gerade einen Test in C gemacht, und es scheint, dass die von gcc erzeugte Assemblerdatei in beiden Fällen addl statt incl verwendet), und es gibt keine Zeigerarithmetik; es wäre also nur ein weiterer Weg gewesen, es zu tun, und wir wissen, dass Python das verabscheut.
Dies ist nicht die Antwort (nur ein Protokoll von mir), aber ich glaube, es sollte dort sein.
Es stimmt zwar, dass es eine Python-Methode gibt, die für Schleifenzähler nicht benötigt wird, aber es gibt nur wenige Fälle, in denen man neben der Variablen, die sich in einer Schleife befindet, auch andere Variablen manipulieren muss.
Wenn man sich die Ansichten zu diesem Thema ansieht, gibt es definitiv einen Anwendungsfall.
Wir brauchen Lobbyarbeit, um diese Funktion einzuführen... obwohl ich nicht glaube, dass das für eine lange Zeit Früchte tragen wird. In der Zwischenzeit: gibt es eine Möglichkeit, Operator-Überladung zu tun, um ++ zu imitieren?
Ich denke, das hängt mit den Konzepten der Veränderbarkeit und Unveränderbarkeit von Objekten zusammen. 2,3,4,5 sind in Python unveränderlich. Siehe das Bild unten. 2 hat bis zu diesem Python-Prozess eine feste ID.
x++ wäre im Wesentlichen ein In-Place-Inkrement wie in C. In C führt x++ In-Place-Inkremente durch. Also, x=3, und x++ würde 3 im Speicher auf 4 inkrementieren, im Gegensatz zu Python, wo 3 noch im Speicher vorhanden wäre.
In Python brauchen Sie also keinen Wert im Speicher neu zu erzeugen. Dies kann zu Leistungsoptimierungen führen.
Diese Antwort beruht auf einer Vermutung.
Ich weiß, dass dies ein alter Thread ist, aber der häufigste Anwendungsfall für ++i ist nicht abgedeckt, nämlich die manuelle Indizierung von Sets, wenn keine Indizes vorhanden sind. Diese Situation ist der Grund, warum Python enumerate() anbietet
Beispiel: Wenn Sie in einer beliebigen Sprache ein Konstrukt wie foreach verwenden, um über eine Menge zu iterieren - um des Beispiels willen nehmen wir an, dass es sich um eine ungeordnete Menge handelt und Sie einen eindeutigen Index für alle Elemente benötigen, um sie zu unterscheiden, sagen wir
i = 0
stuff = {'a': 'b', 'c': 'd', 'e': 'f'}
uniquestuff = {}
for key, val in stuff.items() :
uniquestuff[key] = '{0}{1}'.format(val, i)
i += 1
Für solche Fälle bietet Python eine enumerate-Methode, z. B.
for i, (key, val) in enumerate(stuff.items()) :