5

Pythonの比較演算子の結合性は何ですか? 3 つの比較については簡単ですが、それ以上の場合は、どうすればよいかわかりません。それらは右結合でも左結合でもないようです。

例えば:

>>> 7410 >= 8690 <= -4538 < 9319 > -7092        
False    
>>> (((7410 >= 8690) <= -4538) < 9319) > -7092 
True

したがって、左結合ではありません。

>>> 81037572 > -2025 < -4722 < 6493           
False
>>> (81037572 > (-2025 < (-4722 < 6493)))     
True

したがって、右結合でもありません。

それらが「連鎖」している場所をいくつか見てきましたが、4 つ以上の比較ではどのように機能しますか?

4

3 に答える 3

7

連鎖比較は で展開されるandため、次のようになります。

a <= b <= c

になります:

a <= b and b <= c

(bただし、一度しか評価されません) . これについては、比較に関する言語リファレンスで説明されています。

遅延評価とは、 の場合a > b、結果がFalseであり、bと決して比較されないことを意味することに注意してくださいc

括弧付きのバージョンは完全に異なります。a <= (b <= c)は評価され、その結果とb <= c比較されますが、まったく関与していないため、結果を比較して結合性を判断することは意味がありません。 aand

于 2015-09-12T07:57:37.780 に答える
1

python はブール値のテストを左から右に短絡します。

7410>=8690<=-4538<9319>-7092        -> False

7410>=8690ですFalse。それでおしまい。残りのテストは実行されません。

ご了承ください

True == 1
False == 0

両方Trueであり、ブール値を整数と比較するときに適用されます。したがって、ステートメントを括弧で囲むと、Python にすべてのテストを強制的に実行させることになります。詳細に:

(((7410>=8690)<=-4538)<9319)>-7092
      False   <=-4538
            False     <9319
                    True  >-7092
                         True
于 2015-09-12T07:31:47.737 に答える