0

誰かがこれらの結果がどのように可能であるかを説明できますか (python 2.6):

>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False

最後の 2 つのうちの 1 つが最初のものと一致すると思いますが、どうやら最初のステートメントの演算子は何らかの形でリンクされているようです?!

4

4 に答える 4

9

最初の例は比較連鎖を示しています。 1<3>2を意味します1<3 and 3>2(ただし、各式は 1 回だけ評価されます)。これは、Python のすべての比較演算子に適用されます。

2 番目の 2 つの例では、1 つの比較が最初に評価され、ブール値が生成され、残りの整数と比較されます。

于 2012-09-05T07:09:36.773 に答える
4

最初のケース1<3>2 1では、実際には よりも小さく、より33大きいので2True.

2番目のケースでは、 として表されるものとして(1<3)>2 (1<3)評価されるため、は より大きくありません。True112

3番目のケース1<(3>2)では、として表される1ものよりも小さくありません。True1

于 2012-09-05T07:08:31.317 に答える
2

最後の 2 つのステートメントは、ブール値と整数を比較します。

>>> True > 2
False
>>> 1 < True
False

最初のステートメントは比較チェーンであり、Python のすべてのブール比較で機能します。ドキュメントからのメモ:

比較により、ブール値 (True または False) が生成されます。

式の一部を括弧内に配置すると、それらの部分が最初に評価され、整数とブール値を比較することになります。

于 2012-09-05T07:09:25.003 に答える
1

ドキュメントに従って、

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 はまったく評価されません)。偽であること)。

于 2012-09-05T07:13:19.097 に答える