誰かがこれらの結果がどのように可能であるかを説明できますか (python 2.6):
>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False
最後の 2 つのうちの 1 つが最初のものと一致すると思いますが、どうやら最初のステートメントの演算子は何らかの形でリンクされているようです?!
誰かがこれらの結果がどのように可能であるかを説明できますか (python 2.6):
>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False
最後の 2 つのうちの 1 つが最初のものと一致すると思いますが、どうやら最初のステートメントの演算子は何らかの形でリンクされているようです?!
最初の例は比較連鎖を示しています。 1<3>2
を意味します1<3 and 3>2
(ただし、各式は 1 回だけ評価されます)。これは、Python のすべての比較演算子に適用されます。
2 番目の 2 つの例では、1 つの比較が最初に評価され、ブール値が生成され、残りの整数と比較されます。
最初のケース1<3>2
1
では、実際には よりも小さく、より3
も3
大きいので2
、True
.
2番目のケースでは、 として表されるものとして(1<3)>2
(1<3)
評価されるため、は より大きくありません。True
1
1
2
3番目のケース1<(3>2)
では、として表される1
ものよりも小さくありません。True
1
最後の 2 つのステートメントは、ブール値と整数を比較します。
>>> True > 2
False
>>> 1 < True
False
最初のステートメントは比較チェーンであり、Python のすべてのブール比較で機能します。ドキュメントからのメモ:
比較により、ブール値 (True または False) が生成されます。
式の一部を括弧内に配置すると、それらの部分が最初に評価され、整数とブール値を比較することになります。
ドキュメントに従って、
C とは異なり、Python のすべての比較演算は同じ優先度を持ち、算術演算、シフト演算、またはビット単位の演算よりも低くなります。また、C とは異なり、a < b < c のような式には、数学の慣習的な解釈があります。
比較 ::= or_expr ( comp_operator or_expr )*
comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!=" | "である" ["ではない"] | ["ありませんで"
比較するとブール値が得られます:
True
またはFalse
.比較は任意に連鎖できます。たとえば、x < y <= z は x < y および y <= z と同等ですが、y は 1 回だけ評価されます (ただし、どちらの場合も、x < y が見つかった場合、z はまったく評価されません)。偽であること)。