Python - 如何计算以下表达式?
Python - How does the following expression get evaluated?
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
这与编译器 - 词法 analyser/syntactical 分析器有关吗?
我知道编译器采用了一种 "leftmost, eager and greedy" 方法,但我不完全理解在这种情况下它是如何工作的。
在 Python 中,即
a - ---------------++++++++++++++++++b
即a
减去---------------++++++++++++++++++b
。
前缀-
,否定,改变数字的符号,前缀+
什么都不做。
示例:
>>> -+2
-2
>>> +-2
-2
>>> --2
2
因为有15个否定,所以a - ---------------++++++++++++++++++b
等价于a - -b
,也就是a + b
.
Java、C 和 C++ 具有前缀和后缀 --
和 ++
(递减和递增)运算符,并且通过 "maximal munch rule",您的表达式将显示为作为
(((((((((((((((((a--)--)--)--)--)--)--)--)++)++)++)++)++)++)++)++)++) b
即使在 a
上的那些操作是合法的,也会像 a b
一样胡说八道。
(请注意,a---b
是有效的;它表示 a-- - b
。)
有关递增和递减运算符工作原理的详细信息可以在任何合适的书中找到。
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
这与编译器 - 词法 analyser/syntactical 分析器有关吗? 我知道编译器采用了一种 "leftmost, eager and greedy" 方法,但我不完全理解在这种情况下它是如何工作的。
在 Python 中,即
a - ---------------++++++++++++++++++b
即a
减去---------------++++++++++++++++++b
。
前缀-
,否定,改变数字的符号,前缀+
什么都不做。
示例:
>>> -+2
-2
>>> +-2
-2
>>> --2
2
因为有15个否定,所以a - ---------------++++++++++++++++++b
等价于a - -b
,也就是a + b
.
Java、C 和 C++ 具有前缀和后缀 --
和 ++
(递减和递增)运算符,并且通过 "maximal munch rule",您的表达式将显示为作为
(((((((((((((((((a--)--)--)--)--)--)--)--)++)++)++)++)++)++)++)++)++) b
即使在 a
上的那些操作是合法的,也会像 a b
一样胡说八道。
(请注意,a---b
是有效的;它表示 a-- - b
。)
有关递增和递减运算符工作原理的详细信息可以在任何合适的书中找到。