2016-02-05 12 views
9

ich versehentlich schrieb:= + Python-Operator ist syntaktisch korrekt

total_acc =+ accuracy 

statt:

total_acc += accuracy 

ich das Netz gesucht und nicht anything finden kann. Was ist passiert, warum denkt Python, ich meine, was ich tippe?

Computer vertrauen uns zu viel. :)

+2

'total_acc = + Genauigkeit' ist' total_acc = + Genauigkeit' – Clodion

+0

Ach so, wenn du den negativen Wert willst, tust du * (- 1) nicht, danke @Clodion! Wusste das nicht. – gsamaras

+3

Mögliches Duplikat von [Logik bezüglich der Verwendung von Leerzeichen mit Unary-Operatoren in Python3] (http://stackoverflow.com/questions/35208351/logic-regarding-the-use-of-spaces-with-unary-operators-in- python3) – zondo

Antwort

5

Dies ist das gleiche wie wenn Sie wie total_acc = -accuracy, außer positiv statt negativ tun würden. Es ist im Grunde das gleiche wie total_acc = accuracy, aber ein + hinzufügen, bevor ein Wert es nicht ändert. anstelle von zwei (ex: a+b):

Dies ist ein unärer Operator, da es nur ein Argument (+a ex) genannt.

This link erklärt es ein wenig mehr.

2

Es denkt, Sie tun total_acc = +accuracy, die total_acc gleich accuracy setzt. +, bevor eine Variable ohne einen anderen Wert die __pos__ -Methode der Variablen aufgerufen wird. Für die meisten Arten ist dies ein nop, aber es gibt bestimmte Typen, z. Decimal, die implementieren.

+0

Ja das ist richtig, aber was passiert mit '+' Operator? – gsamaras

+3

'+' vor einem Wert ruft die '__pos __()' -Methode des Objekts auf, falls es eine hat. Die meisten Typen haben keine solche Methode, also ist es ein No-Op. "Dezimal" ist ein Typ, der es verwendet; https://stackoverflow.com/questions/16819023/whats-the-purpose-of-the-pos-unary-operator-in-python – kindall

+0

@kindall Huh, das wusste ich nicht. Gut zu wissen, danke! Ich füge das meiner Antwort hinzu. –

7

Wenn Sie diese Art von Fehlern früh erkennen möchten, können Sie dies mit statische Code-Analyse tun. Zum Beispiel flake8:

$ cat test.py 
total_acc = 0 
accuracy = 10 

total_acc =+ accuracy 
$ flake8 test.py 
test.py:4:12: E225 missing whitespace around operator 

In diesem Fall ist es beschweren sich über den zusätzlichen Platz nach dem +, zu denken, dass Sie tatsächlich total_acc = +accuracy gemeint. Dies hätte Ihnen geholfen, das Problem früher zu entdecken.

FYI, pylint würde das auch fangen.

+2

Ihre Antwort fügt * wirklich * etwas Besonderes hier hinzu, Sie verdienen eine Verbesserung2! – gsamaras