2010-04-13 19 views
489

Mögliche Duplizieren:
Python: Behaviour of increment and decrement operatorsinteger Python Inkrementieren mit ++

Ich habe immer an mich ausgelacht, als ich an meinem VB6 Tage und Gedanken haben gesucht zurück „, was die moderne sprache erlaubt nicht inkrementieren mit doppelten plus zeichen? ":

Zu meiner Überraschung kann ich nicht finden irgendetwas darüber in den Python-Dokumenten. Muss ich mich wirklich number = number + 1 unterwerfen? Verwenden die Leute nicht die Notation ++/--?

+7

Ich für meinen Teil bin ziemlich glücklich, dass wir uns nicht mit Dingen wie 'a [i] = i ++;' abfinden müssen, wo die Reihenfolge der Auswertung in C++ undefiniert ist. –

+1

Auch wenn es so etwas gibt, denke ich in Python ist die Reihenfolge wohldefiniert. (http://docs.python.org/reference/expressions.html#evaluation-order) – kennytm

+3

Antworten auf Ihre Fragen in der angegebenen Reihenfolge: "Erlang, Python, Lua usw." (für "modern" bedeutet nach der Erstellung von C); "Nein"; und "Nicht unbedingt". – tzot

Antwort

885

Python nicht unterstützt ++, aber Sie tun können:

number += 1 
+53

Ich denke, dass @ Thomas Erklärung ist hier nützlicher; Ich denke, die Frage ist mehr "warum" und nicht "was". – rickcnagy

+1

Das ist, was ich gesucht habe +1 – JMG

+1

Vereinbarte mit @rickcnagy, mehr wie die "wie es geht?" (Wenn Ihnen die Kürze des Codes wirklich egal ist, können Sie auch einfach nummer = Zahl + 1). Die Begründung, warum ++ und - in Python nicht existieren, scheint sinnvoller zu sein. – AirieFenix

20

Ja. Der Operator ++ ist in Python nicht verfügbar. Guido mag diese Operatoren nicht.

+172

Vielleicht wollte Guido nicht, dass irgendjemand 'Python ++' erfand;) lol –

+0

Es macht das Schreiben von UI-Code so viel weniger line-y obwohl. Abgesehen von der Tatsache, dass die Verwendung von Python Ihre Zeilen auf 15% reduziert, was sie in C++ wären, heh. –

29

können Sie tun:

number += 1 
15

Sie verwenden können:

number += 1 
8

Werfen Sie einen Blick auf Behaviour of increment and decrement operators in Python für eine Erklärung, warum dies nicht funktioniert.

Python hat nicht wirklich ++ und -, und ich persönlich habe nie gedacht, dass es so ein Verlust war.

Ich bevorzuge Funktionen mit klaren Namen für Operatoren mit nicht immer klarer Semantik (daher die klassische Interviewfrage zu ++ x vs. x ++ und den Schwierigkeiten, sie zu überlasten). Ich war auch nie ein großer Fan dessen, was Post-Inkrementierung für die Lesbarkeit tut.

Sie können immer einig Wrapper-Klasse definieren (wie Akkumulator) mit klarer Zuwachs Semantik, und dann so etwas wie x.increment tun() oder x.incrementAndReturnPrev()

313

Einfach gesagt, die ++ und -- Operatoren existieren nicht in Python, weil sie nicht Betreiber wären, würden sie Aussagen sein. Alle Namespace-Änderungen in Python sind zur Vereinfachung und Konsistenz eine Anweisung. Das ist eine der Design-Entscheidungen. Und da Ganzzahlen unveränderlich sind, ist die einzige Möglichkeit, eine Variable zu "ändern", die Neuzuordnung.

Zum Glück haben wir wunderbare Werkzeuge für die Anwendungsfälle von ++ und -- in anderen Sprachen, wie enumerate() und itertools.count().

+5

nützliche Referenz zu 'enumerate()' und 'itertools.count()' – tato

+7

Ich kann nicht glauben, dass Python Sprachdesign so ernst nimmt! Ich fange an, mich in die Sprache zu verlieben! :-) – dotslash

+2

Vorsicht, einen eleganten Ersatz dafür vorschlagen: 'reserved_index = 0; col_names = [Name wenn Name! = '_' sonst 'reserviert' + (reservierter_Index ++) für Name in Spaltennamen] '? Ich habe eine Liste von Spaltennamen, wo einige, die nicht interessant sind, nur "_" sind. Ich muss eine temporäre Tabelle mit diesen _ _ _ '' s mit eindeutigen aber nicht bedeutungsvollen Namen konstruieren. Der In-Place-Postinkrementoperator würde dies leicht machen; Ich habe Schwierigkeiten, etwas anderes zu finden, bei dem das Array nicht explizit durchlaufen wird. – Tom

16

Der Hauptgrund, warum ++ in C-ähnlichen Sprachen nützlich ist, ist die Verfolgung von Indizes. In Python beschäftigen Sie sich mit Daten auf eine abstrakte Weise und erhöhen selten durch Indizes und dergleichen. Die nächstliegende Idee zu ++ ist die next Methode von Iteratoren.