2016-09-14 98 views
-4
a=5;b=10;a----------------++++++++++++++++++b 
# Output: 15 

以上是python腳本的輸出。 你能解釋它是如何工作的嗎?我很驚訝,它的作品,並給出了答案!Python - 如何評估以下表達式?

但是類似這樣的表達不使用Java,C工作,C++ 例如:

a=10;  
b=5; 
System.out.println(a---b);//error!! 
cout<<a---b;//error 
printf("%d\n",a---b);//error 

這是否有東西做的編譯器 - 詞法分析器/句法分析器? 我明白編譯器有一個「最左邊,渴望和貪婪」的方法,但我並不完全明白在這種情況下它是如何工作的。

+0

但是'a --- b'起作用並且它與 – SomeJavaGuy

+1

相似。 Java,'a - b'是什麼意思?它是否意味着'a - b'? 'a - b'? 'a - -b'?它會認爲它是前兩種情況之一,並且這兩種情況都不是有效的。 –

+2

您需要回答哪三種其他語言?在C中,答案是「這是一個語法錯誤」。還是你問一個Python問題? –

回答

6

在Python,這是

a - ---------------++++++++++++++++++b 

也就是說,減去a---------------++++++++++++++++++b

前綴-,否定,更改數字的符號,前綴+什麼都不做。
實施例:

>>> -+2 
-2 
>>> +-2 
-2 
>>> --2 
2 

由於有15個否定,a - ---------------++++++++++++++++++b相當於a - -b,這是a + b

的Java,C和C++有前綴和後綴--++(減量和增量)的運營商,並通過了「最大適合規則」,你的表達會讀成

(((((((((((((((((a--)--)--)--)--)--)--)--)++)++)++)++)++)++)++)++)++) b 

其中,即使這些對a的操作是合法的,會和a b一樣無稽之談。
(注意:a---b是有效的,這意味着a-- - b)對增量和減量運算的工作

細節可以在任何合適的書中找到。

+0

謝謝!這確實有幫助。 –