Warum gibt es keine ++
y --
Operatoren in Python?
Antworten
Zu viele Anzeigen?Erstens ist Python nur indirekt von C beeinflusst; es ist stark beeinflusst von ABC die verfügt offenbar nicht über diese Operatoren Daher sollte es keine große Überraschung sein, sie auch in Python nicht zu finden.
Zweitens werden Inkrement und Dekrement, wie bereits erwähnt, unterstützt durch +=
y -=
bereits.
Drittens: Volle Unterstützung für eine ++
y --
Operator-Satz umfasst in der Regel die Unterstützung sowohl der Präfix- als auch der Postfix-Version dieser Operatoren. In C und C++ kann dies zu allerlei "schönen" Konstrukten führen, die (meiner Meinung nach) dem Geist der Einfachheit und Geradlinigkeit, den Python verkörpert, zu widersprechen scheinen.
Während zum Beispiel die C-Anweisung while(*t++ = *s++);
mag für einen erfahrenen Programmierer einfach und elegant erscheinen, für jemanden, der es lernt, ist es alles andere als einfach. Wenn man eine Mischung aus Präfix- und Postfix-Inkrementen und Dekrementen hinzufügt, müssen selbst viele Profis innehalten und ein wenig nachdenken.
El ++
Klasse von Operatoren sind Ausdrücke mit Nebeneffekten. Dies ist etwas, das es in Python im Allgemeinen nicht gibt.
Aus demselben Grund ist eine Zuweisung in Python kein Ausdruck, so dass die übliche if (a = f(...)) { /* using a here */ }
Idiom.
Schließlich vermute ich, dass es Operator sind nicht sehr konsistent mit Pythons Referenz Semantik. Denken Sie daran, dass Python keine Variablen (oder Zeiger) mit der aus C/C++ bekannten Semantik hat.
Wie ich es verstanden habe, damit Sie nicht denken, dass der Wert im Speicher geändert wird. In C ändert sich der Wert von x im Speicher, wenn man x++ macht. Aber in Python sind alle Zahlen unveränderlich, daher hat die Adresse, auf die x zeigt, immer noch x und nicht x+1. Wenn Sie x++ schreiben, würden Sie denken, dass sich x ändert, was wirklich passiert, ist, dass die x-Referenz zu einer Stelle im Speicher geändert wird, an der x+1 gespeichert ist oder diese Stelle neu erstellt wird, wenn sie nicht existiert.
Andere Antworten haben beschrieben, warum es nicht für Iteratoren benötigt wird, aber manchmal ist es nützlich, wenn die Zuweisung eine Variable in-line zu erhöhen, können Sie den gleichen Effekt mit Tupeln und Mehrfachzuweisung zu erreichen:
b = ++a
wird:
a,b = (a+1,)*2
y b = a++
wird:
a,b = a+1, a
Python 3.8 führt die Zuweisung :=
Operator, wodurch wir Folgendes erreichen können foo(++a)
con
foo(a:=a+1)
foo(a++)
ist allerdings immer noch schwer zu fassen.