Python - 如何评估以下表达式?

时间:2016-09-14 09:42:49

标签: python lexical-analysis

a=5;b=10;a----------------++++++++++++++++++b
# Output: 15

以上是python脚本的输出。 你能解释它是如何工作的吗?我很惊讶它的工作原理并给出了答案!!

然而,类似的这样的表达式在Java,C,C ++中不起作用 例如:

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

这是否与编译器有关 - 词法分析器/句法分析器? 我理解编译器采用了“最左边,最急切和最贪婪”的方法,但我并不完全理解在这种情况下它是如何工作的。

1 个答案:

答案 0 :(得分:6)

在Python中,那是

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

即从---------------++++++++++++++++++b中减去a

前缀-,否定,更改数字符号,前缀+不执行任何操作。
例如:

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

由于有15个否定,a - ---------------++++++++++++++++++b相当于a - -b,即a + b

Java,C和C ++具有前缀和后缀--++(递减和递增)运算符,并且通过&#34;最大咬合规则&#34;,您的表达式将读作

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

即使a上的这些操作合法,也会像a b一样无意义。
(请注意,a---b有效;它表示a-- - b。)

有关递增和递减运算符的详细信息,请参阅任何合适的书籍。