2016-09-14 106 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

谢谢!这确实有帮助。 –