514 Stimmen

Warum gibt es in Python keine ++ und -- Operatoren?

Warum gibt es keine ++ y -- Operatoren in Python?

3voto

Sepheus Punkte 143

Ich glaube, das kommt von dem Python-Credo, dass "explizit besser ist als implizit".

3voto

wberry Punkte 17277

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.

2voto

Ber Punkte 37347

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.

1voto

rafi wiener Punkte 557

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.

1voto

JeffUK Punkte 3937

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X