2017-01-30 13 views
18

Dlaczego następujące polecenie python zostało ocenione na 3?Dlaczego operatorzy dwóch plusów nie zgłaszają błędu (np. 1 + 2)

1 + + 2 

Spodziewałbym się, że spowoduje to błąd jako złe użycie operatorów. I to nie ogranicza się tylko do dwóch operatorów, powyższe może zostać przedłużony:

1 + + - - + + - + + - 2 

... nadal ocenia się 3. Co może być powodem, dla którego projektant języka dopuszcza tę bardzo dziwną składnię.

+2

każdy z nas ma chwile, uzyskać nad nim. – speedplane

+1

@ edc65 - nie każdy wie, kto odziedziczył po ciemnych zakamarkach :) – LThode

+1

FYI, Python to nie jedyny język, w którym to się dzieje. W Javie możemy napisać System.out.println (1 + + + 2); – Stormcloud

Odpowiedz

42

to dlatego, że jesteś dodając 1 z +2 (używając + jednoargumentowy operator)

>>> +2 
2 

i

>>> --2 
2 

do kompleksowego przykład:

1 + + - - + + - + + - 2 

postanawia 1 +(+--++-++-2), drugi termin, który można uprościć jako 2, ponieważ liczba znaków minus to nawet

+0

Nieuzasadnione upublicznienie podziękowania za robienie dobrych rzeczy gdzie indziej :-) –

+1

Byłem pewien, że to ty :) Nie ma żadnych uczuć, gdy prawda zwycięża (przejąłem twoją odpowiedź BTW) –

15

zgodnie z python.org, jednoargumentowe + i jednoargumentowe - operatory mają większy priorytet niż dodawanie i odejmowanie. W pytonie

+number 

jest prawidłowym wyrażeniem, które właśnie zwraca numer. Ponieważ ma wyższy priorytet, jest oceniany przed każdym dodaniem lub odjęciem.

1 + + - - + + - + + - 2 

jest równoważna

(1) + (+(-(-(+(+(-(+(+(-2))))))))) 

Więc jaki jest sens operatora jednoargumentowego +? Dobrze, że odpowiedź jest w this question.

5

Pamiętaj, że +3 to numer, a -3 to numer. Co się dzieje jest

1 + + 2 

staje

1 + (+2) 

i

1 - + - 2 

staje

1 - (+ (-2)) 
Powiązane problemy