2012-05-25 10 views
16

Es gibt die folgenden Bit-Python-Code in einem Projekt, das ich pflegen müssen:Was bewirkt ein Pluszeichen vor einer Variablen in Python?

# If the `factor` decimal is given, compute new price and a delta 
factor = +factor.quantize(TWOPLACES) 
new_price = +Decimal(old_price * factor).quantize(TWOPLACES) 
delta = new_price - old_price 

Die hier Frage der Zweck + vor einem variabel ist.

Python docs call es unary Plus-Operator, die "seine numerische Argument unverändert". Kann es dann sicher entfernt werden?

(Übrigens wurde der Code vor einiger Zeit von mir geschrieben, hoffentlich habe ich die Lektion gelernt - es wäre keine Frage, ob Tests bestanden oder ob die Verwendung von unary plus auf einer Dezimalstelle in Kommentaren geklärt wurde .)

+2

Was passiert, wenn Sie es entfernen? –

+1

Nichts ist offensichtlich, aber da es sich um sensible numerische Informationen handelt (Produktpreise), ist es besser, dies sicher zu wissen. Leider fehlen relevante Tests. – Tony

+0

Ich bin sicher, dass es einen Zweck dafür gibt. Ich weiß die Antwort nicht, aber ich war neugierig, ob es einen unmittelbaren, spürbaren Unterschied gab. –

Antwort

18

Was dieses Pluszeichen bewirkt, hängt davon ab, was es durch das Ergebnis dieses Ausdrucks definiert hat (die Methode des Objekts __pos__() wird aufgerufen). In diesem Fall handelt es sich um ein Objekt Decimal, und das unäre Plus entspricht dem Aufruf des Verfahrens plus(). Im Grunde wird es verwendet, um den aktuellen Kontext (Genauigkeit, Rundung usw.) anzuwenden, ohne das Vorzeichen der Zahl zu ändern. Suchen Sie nach einem setcontext() oder localcontext() Aufruf an anderer Stelle, um zu sehen, was der Kontext ist. Für weitere Informationen, see here.

Das unäre Plus wird nicht oft verwendet, daher ist es nicht verwunderlich, dass diese Verwendung nicht bekannt ist. Ich denke, das decimal Modul ist das einzige Standardmodul, das es verwendet.

+0

Danke! Es existiert tatsächlich ein 'setcontext (Context (rounding = ROUND_UP))' Aufruf am Anfang des Moduls. – Tony

2

Ich stieß auf das gleiche Problem, wenn ich falsch angenommen, dass Python den C-inkrement (++) -Operator unterstützen muss; es tut es nicht! Stattdessen wird der Pluszeichenoperator (+) zweimal angewendet. Was nichts zweimal macht, habe ich bald gelernt. Da jedoch "++ n" gültig war ... und nicht als Syntaxfehler gekennzeichnet war, habe ich einen fürchterlichen Fehler gemacht.

Also, wenn Sie nicht neu definieren, was es tut, macht unary + eigentlich nichts. Unary - wechselt von positiv zu negativ und umgekehrt, weshalb "--n" auch nicht als Syntaxfehler gekennzeichnet ist, aber auch nichts tut.