Logik in Bezug auf die Verwendung von Leerzeichen mit Unary Operators in Python3

Mein Problem begann, als ich einen Fehler beim Erstellen einer Indexzählung für eine for-Schleife machte und ich fand ein Verhalten in Python 3.4, das ich nicht verstand.

> a = 1 > a =+ 2 #reversed 'plus and equal' > a 2 > a += 2 #correct 'plus and equal' > a > a 4 

Zuerst dachte ich, dass dieser Fehler einen Fehler zurückgegeben hätte, aber ich begann zu denken, dass die umgekehrte 'plus und gleich'-Logik stattdessen als Variable interpretiert werden kann' a 'ist gleich einer positiven Ganzzahl' 2 '. Um dies zu bestätigen, habe ich versucht, eine Variable auf eine negative Ganzzahl zu setzen und es dann zu verwenden, um das Vorzeichen einer Variablen zu ändern.

 > a =- 2 > a -2 > a =- a > a 2 > a = -a > a -2 

Das alles ließ mich fragen, warum ein univer Operator nicht an die Integer oder Variable angrenzen muss, die geändert wird.

2 Solutions collect form web for “Logik in Bezug auf die Verwendung von Leerzeichen mit Unary Operators in Python3”

Python liest rechts nach links, in dem, was auf der rechten Seite der Gleichen wird zuerst interpretiert, so dass Sie die beiden Seiten haben:

 (a) =(+ 2) 

Whitespace ist freier Raum, also unabhängig vom Whitespace wird der Dolmetscher noch Zeilen von Code lesen, als ob der Whitespace nicht da wäre. Als solches, Python interpretiert es als equals +2 so ist es einfach wie eine ganzzahlige positive (oder negativ, wenn Sie equals minus 2 )

 >>> a =+ 2 # note the whitespace >>> a >>> 2 >>> a = +2 # consistent interpretation >>> a 2 >>> a =- 2 # no matter where >>> a -2 >>> a = -2 # the whitespace is >>> a -2 

Es ist wie, wie Sie nicht haben, um einen Raum zwischen um die Gleiche bei der Zuweisung zu haben. z.B:

 a = 1 

ist das gleiche wie

 a=1 

Der Dolmetscher liest ihn in der entsprechenden Reihenfolge und manipuliert die Informationen, wie er sie interpretiert.

Wenn a =+ 2 einen Fehler auslösen sollte, so sollte a = +2 , da Python sowohl a = 2 als auch a=2 erlaubt; Es kümmert sich nicht wirklich darum, wo du deine Räume stellst (solange du dich auf deine Einrückung kümmerst).

Dolmetscher und Compiler werfen Fehler, wenn es einen Fehler gibt, und sie haben keine Ahnung, was du wirklich willst. In diesem Fall ist es völlig klar, wie das Verhalten gut definiert ist (Sie sind nur die Zuweisung einer (redundant deklarierten) positiven Integer einer Variablen).

Dolmetscher und Compiler sollten dich nicht fragen "Ist das wirklich was du willst?". Ein anderes Beispiel wäre eine Zuordnung in einer if-Bedingung, wie if (line = readLine()) . Es ist sicherlich möglich, dass dies aus Versehen passiert ist, aber es ist immer noch klar, was passieren soll, und viele Entwickler verwenden diese Methode, um aus Datenströmen zu lesen. (Obwohl es eine Sprache gibt, die es nicht erlaubt, Zuordnungen unter Bedingungen zu geben, nicht sicher, welche ist es …)

Während Dolmetscher und Compiler sollten nicht versuchen zu erraten, ob das ist eigentlich ein Fehler durch den Entwickler oder nicht getan, Tools für statische Code-Analyse gibt es, um Zeug wie das unter anderem zu zeigen.

Also, um deine Frage zu beantworten ( Gibt es einen Grund, dass umgekehrt + = sollte nicht einen Fehler zurückgeben ): Ja. Weil es kein Fehler ist.

Aktualisieren

Wie in den Kommentaren darauf hingewiesen, ist es eigentlich Python, der keine Zuordnungen unter Bedingungen zulässt.

Also ich überrede meine Antwort: Nein , ich glaube nicht, dass es irgendeinen Grund gibt, dass dies kein Fehler sein sollte. Wenn Python versucht, Entwicklerfehler zu vermeiden (das ist, was sie in den docs sagen: "[…] es vermeidet eine häufige Klasse von Problemen, die in C-Programmen angetroffen werden: typing = in einem Ausdruck, wenn == beabsichtigt war Könnte es auch in deinem Fall machen.

  • Erfassen eines Fehlers mit Videos - Kivy unter Windows 7
  • Warum arbeiten meine Input / Output-Prozessoren in Scrapy nicht?
  • Wie benutzt man Str.replace auf Mustern auf einem TLE und finde dann ein Match aus dem TLE?
  • Fehler: Fehler beim Baustellenrad für wxpython-phoenix bei der Installation von wx
  • Ttk.Treeview - Änderungsreihenfolge kann nicht geändert werden
  • Führen Sie vpython in python3 ohne jupyter möglich?
  • Wie man eine Eingabe in Python abfragt, ohne eine neue Zeile auszugeben
  • Wie kann ich eine Datei in Python (Jinja2) herunterladen?
  • Python re.sub: ignorieren Rückreferenzen in der Ersatzzeichenfolge
  • Kann keine bestimmte Zeile aus der Textdatei drucken
  • Arbeiten mit JSON in JSON mit Python / Pandas verschachtelt
  • Python ist die beste Programmiersprache der Welt.