15

今朝、私は自分が次のようなものを書いていることに気づきました:

if (a == b == c):
  # do something

そして、期待通りの結果が得られたことに驚きました。

私はそれが次のように振る舞うと思った:

if ((a == b) == c):
  # do something

しかし、明らかにそうではありませんでした。Python は最初のステートメントを 2 番目のステートメントとは異なる方法で扱っているようですが、これは素晴らしいことですが、これに関するドキュメントや説明は見つかりませんでした。

私はこれをテストして得ました:

In [1]: 2 == 2 == 2
Out[1]: True

In [2]: (2 == 2) == 2
Out[2]: False

==(or )のそのような「連鎖」に関する規則は何か、誰かが私に説明してくれませんか!=?

どうもありがとうございました。

4

3 に答える 3

24

これはすべての比較演算子で機能します。たとえば、次のこともできます。

>>> 4 < 5 < 6
True
>>> 4 < 5 !=2
True

一般に、ドキュメンテーションによると、a op1 b op2 cop1次のいずれかop2です: <>!===<=>=isまたはis notinnot in

a op1 b and b op2 c

ドキュメントには、これは任意の多くの比較で機能する可能性があるとも書かれているため、次のようになります。

>>> 5 != '5' != 'five' != (3+2)
True

5 != (3+2)各オペランドは、すべての可能な組み合わせを実行するのではなく、すぐに隣接するオペランドと比較されるだけであると思われるため、これは少し紛らわしい結果になることがあります( のみを使用した例からは明確ではないかもしれませ==ん。すべてが正常に定義されている場合、答えに影響します__eq__)。

于 2012-06-22T09:48:03.823 に答える
12

私が知る限り、あなたが指摘する例は連鎖していません。

2 == 2 == 2のような (2 == 2) and ( 2 == 2)ものですTrue and True

その間

(2 == 2) == 2のようなものです(True) == 2

于 2012-06-22T09:47:18.597 に答える
3

ここをチェックしてください:http://docs.python.org/reference/expressions.html#not-in

于 2012-06-22T09:46:46.300 に答える