2012-05-25 54 views
16

有Python代碼在一個項目中的以下位我要保持:加號在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 

這裏的問題是+在變量前面的目的。

Python docs call it 一元加運算符,其「使其數值參數保持不變」。它可以安全地刪除嗎? (順便說一下,代碼是我前段時間編寫的,希望我已經吸取了教訓 - 如果測試已經存在,或者如果在註釋中澄清了小數點上的一元加號的使用,這不會成爲問題)

+2

當你刪除它會發生什麼? –

+1

沒有什麼是顯而易見的,但由於它處理敏感的數字信息(產品定價),所以最好能夠確定。唉,相關的測試不見了。 – Tony

+0

我確定這有一些目的。我不知道答案,但我很好奇,如果有一個直接的,明顯的差異。 –

回答

18

那個加號的作用取決於它由該表達式的結果定義的內容(該對象的__pos__()方法被調用)。在這種情況下,這是一個Decimal對象,而一元正相當於調用plus()方法。基本上,它用於應用當前上下文(精度,舍入等)而不改變數字的符號。請在其他地方查找setcontext()localcontext()調用以查看上下文是什麼。欲瞭解更多信息,請致電see here

unary plus不經常使用,所以這個用法並不陌生。我認爲decimal模塊是使用它的唯一標準模塊。

+0

謝謝!在模塊的開始確實存在'setcontext(Context(rounding = ROUND_UP))'調用。 – Tony

2

當我錯誤地認爲Python必須支持C增量(++)運算符時,我遇到了同樣的問題;它不!相反,它會應用加號運算符(+)兩次!哪些事什麼都不做,我很快就學會了。但是,因爲「++ n」看起來有效......沒有標記爲語法錯誤......我爲自己創建了一個可怕的錯誤。

所以除非你重新定義了它的作用,否則一元+實際上什麼都不做。一元 - 從正變爲負,反之亦然,這就是爲什麼「 - n」也沒有被標記爲語法錯誤,但它也沒有做任何事情。

相關問題