2012-05-25 12 views
16

C'è il seguente pezzo di codice Python in un progetto devo mantenere:Cosa fa un segno più di fronte a una variabile 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 

La domanda qui è lo scopo di + di fronte a una variabile.

Python doc call it unario più operatore, che "restituisce il suo argomento numerico invariato". Può essere rimosso in sicurezza allora?

(Per inciso, il codice è stato scritto da me qualche tempo fa, spero di aver imparato la lezione: non sarebbe una domanda se i test esistessero, o se l'uso di unario più su un decimale fosse stato chiarito nei commenti .)

+2

Cosa succede quando lo rimuovi? –

+1

Nulla di ovvio, ma dal momento che si tratta di informazioni numeriche sensibili (prezzi del prodotto) è meglio sapere con certezza. Purtroppo, mancano test rilevanti. – Tony

+0

Sono sicuro che c'è uno scopo per questo. Non conosco la risposta, ma ero curioso di sapere se c'era una differenza immediata e visibile. –

risposta

18

Cosa significa che il segno più dipende da cosa viene definito dal risultato di quell'espressione (viene chiamato il metodo __pos__() dell'oggetto). In questo caso, si tratta di un oggetto Decimal e il valore unario è equivalente alla chiamata al metodo plus(). Fondamentalmente, è usato per applicare il contesto corrente (precisione, arrotondamento, ecc.) Senza cambiare il segno del numero. Cerca una chiamata setcontext() o localcontext() altrove per vedere qual è il contesto. Per ulteriori informazioni, see here.

Il valore unario non viene utilizzato molto spesso, quindi non sorprende che questo utilizzo non sia familiare. Penso che il modulo decimal sia l'unico modulo standard che lo utilizza.

+0

Grazie! Esiste effettivamente una chiamata 'setcontext (Context (rounding = ROUND_UP))' all'inizio del modulo. – Tony

2

Mi sono imbattuto in questo stesso problema quando ho assunto erroneamente che Python deve supportare l'operatore di incremento C (++); non è così! Invece, applica l'operatore segno più (+) due volte! Che non fa nulla due volte, ho imparato presto. Tuttavia, poiché "++ n" sembrava valido ... non contrassegnato come errore di sintassi ... Ho creato un bug terribile per me stesso.

Quindi, a meno che non si ridefinisca ciò che fa, unario + in realtà non fa nulla. Unario: cambia da positivo a negativo e viceversa, motivo per cui "--n" non viene contrassegnato come errore di sintassi ma non fa nulla.

Problemi correlati