2016-02-05 63 views
9

我無意中寫道:的= + Python的運算符語法正確

total_acc =+ accuracy 

代替:

total_acc += accuracy 

我搜索網,但沒有找到anything。那麼發生了什麼,爲什麼Python認爲我的意思是我正在輸入?

電腦相信我們太多。 :)

+2

'total_acc = +準確性'是'total_acc = +準確性' – Clodion

+0

哦,所以當你想要負值時,你不要做*( - 1),謝謝@Clodion!不知道。 – gsamaras

+3

[關於在Python3中使用空格與一元運算符的邏輯]的可能重複(http://stackoverflow.com/questions/35208351/logic-regarding-the-use-of-spaces-with-unary-operators-in- python3) – zondo

回答

5

這是一樣的,如果你像total_acc = -accuracy那樣做,除了正面而不是負面。它基本上與total_acc = accuracy相同,因爲在值之前添加+並不會改變它。

這就是所謂的元運算符因爲只有一個參數(例如:+a),而不是兩個(例如:a+b)。

This link解釋它多一點。

2

它認爲你在做total_acc = +accuracy,它設置total_acc等於accuracy+之前沒有其他值的變量導致變量的__pos__方法被調用。對於大多數類型,這是一個nop,但有某些類型,例如Decimal,實施__pos__

+0

是的,這是正確的,但是'+'運算符會發生什麼? – gsamaras

+3

'+'在值調用對象的'__pos __()'方法之前,如果它有一個。大多數類型沒有這樣的方法,所以它是沒有操作的。 Decimal是一種使用它的類型; https://stackoverflow.com/questions/16819023/whats-the-purpose-of-the-pos-unary-operator-in-python – kindall

+0

@ kindall嗯,我不知道。很高興知道,謝謝!我會將其添加到我的答案中。 –

7

如果您有興趣儘早發現此類錯誤,可以使用靜態代碼分析來完成此操作。例如,flake8

$ cat test.py 
total_acc = 0 
accuracy = 10 

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

在這種情況下,抱怨+後的額外空間,以爲你實際上意味着total_acc = +accuracy。這會幫助你更早地發現問題。

FYI,pylint也可以捕捉到。

+2

你的答案增加了*真正*這裏特別的東西,你應該得到upvote²! – gsamaras