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

これは、コンパイラとは何かを持っていますか? 私は、コンパイラーによる「一番左手で熱心で貪欲な」アプローチがあると理解していますが、この場合の動作を正確に理解できません。 Pythonで

+0

ですが、 'a --- b'も同様に動作し、それと同様です。 – SomeJavaGuy

+1

In Java、 'a-b'はどういう意味ですか? 'a - b'を意味するのでしょうか? 'a-b'? 'a - -b'?それは最初の2つのケースのうちの1つであると想定され、どちらも有効ではありません。 –

+2

あなたはその3人の他のランゲージのうちどれを答えたいのですか? Cの答えは "それは構文エラーです"です。あるいは、あなたはPythonの質問をしていますか? –

答えて

6

、それは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

ありがとう!これは確かに助けになった。 –

関連する問題