1017 Stimmen

Python Inkrementierung von Ganzzahlen mit ++

Ich habe immer gelacht, wenn ich auf meine VB6-Tage zurückblickte und dachte: "Welche moderne Sprache erlaubt keine Inkrementierung mit doppelten Pluszeichen?":

number++

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

10 Stimmen

Ich für meinen Teil bin ganz froh, dass wir uns nicht mit Dingen herumschlagen müssen wie a[i] = i++; wobei die Reihenfolge der Auswertung in C++ undefiniert ist.

3 Stimmen

Selbst wenn es so etwas gibt, denke ich, dass die Reihenfolge in Python klar definiert ist. ( docs.python.org/reference/expressions.html#evaluation-order )

5 Stimmen

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

1766voto

Daniel Stutzbach Punkte 69710

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

number += 1

122 Stimmen

Ich denke, dass die Erklärung von @Thomas hier nützlicher ist; ich denke, die Frage ist eher why und nicht what .

1 Stimmen

Ich stimme mit @rickcnagy überein, eher mit dem "Wie soll ich es machen?" (wenn Ihnen die Kürze des Codes wirklich egal ist, könnten Sie auch einfach Zahl = Zahl + 1 sagen), die Begründung, warum ++ und -- in Python nicht existieren, scheint nützlicher zu sein.

8 Stimmen

Nicht ganz. Das Folgende wird nicht wie erwartet funktionieren: progress = 0; print(progress += 1) . Also += scheint die C++-Funktionalität nicht vollständig zu ersetzen. ++ Betreiber.

543voto

Thomas Wouters Punkte 124421

Einfach ausgedrückt, die ++ y -- Operatoren gibt es in Python nicht, denn sie wären nicht Betreiber müssten sie sein Aussagen . Jede Namensraumänderung in Python ist der Einfachheit und Konsistenz halber eine Anweisung. Das ist eine der Designentscheidungen. Und da Ganzzahlen unveränderlich sind, ist die einzige Möglichkeit, eine Variable zu "ändern", ihre Neuzuweisung.

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

24 Stimmen

Nützlicher Hinweis auf enumerate() y itertools.count()

2 Stimmen

Könnten Sie einen eleganten Ersatz dafür vorschlagen? reserved_index = 0; col_names = [name if name != '_' else 'reserved' + (reserved_index++) for name in column_names] ? Mir wird eine Liste von Spaltennamen übergeben, in der einige, die nicht interessant sind, einfach '_' . Ich muss eine temporäre Tabelle mit diesen Daten erstellen. '_' s durch eindeutige, aber nicht aussagekräftige Namen ersetzt. Die In-Place-Postincrement-Operator würde dies einfach zu machen; Ich bin kämpfen, um mit etwas anderes zu kommen, die nicht über das Array explizit Schleife beinhalten.

6 Stimmen

@Tom reserved_indices = itertools.count(); col_names = [name if name != '_' else 'reserved' + str(next(reserved_indices)) for name in column_names]

67voto

knutin Punkte 4883

Das können Sie tun:

number += 1

38voto

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

2 Stimmen

Es macht das Schreiben von UI-Code so viel weniger Zeile-y though. Nun, abgesehen von der Tatsache, dass mit Python Ihre Zeilen auf wie 15%, was sie in C++ sein würde, heh reduziert.

26voto

Mike Graham Punkte 68846

Der Hauptgrund, warum ++ in C-ähnlichen Sprachen nützlich ist, ist die Verfolgung von Indizes. In Python wird mit Daten auf abstrakte Weise umgegangen und nur selten durch Indizes und dergleichen inkrementiert. Die naheliegendste Sache zu ++ ist die next Methode der Iteratoren.

3 Stimmen

Manchmal finde ich, dass man wirklich nur Iterationsindizes braucht, z. B. wenn man verfolgen will, wie oft eine Funktion ausgeführt wird, bevor sie konvergiert, usw. Obwohl das vielleicht noch als "selten verwendet" zählt, ist Python ziemlich gut geeignet für den größten Teil der wissenschaftlichen Codierung, FWIW.

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