1. ホーム
  2. python

[解決済み] Pythonで0 < 0 == 0という式がFalseを返すのはなぜですか?

2022-05-17 11:15:10

疑問点

Python 2.6のQueue.pyを見ていると、ちょっと不思議な構成が見つかりました。

def full(self):
    """Return True if the queue is full, False otherwise
    (not reliable!)."""
    self.mutex.acquire()
    n = 0 < self.maxsize == self._qsize()
    self.mutex.release()
    return n

もし maxsize が 0 の場合、キューが満杯になることはありません。

私の質問は、この場合どのように動作するのでしょうか?どのように 0 < 0 == 0 は偽とみなされるのですか?

>>> 0 < 0 == 0
False
>>> (0) < (0 == 0)
True
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True

どのように解決するのですか?

Pythonは範囲比較を簡単に表現するために、関係演算子の並びに対して特殊なケース処理を行うようになっていると思います。そのため、Pythonでは関係演算子列の大文字小文字を区別しています。 0 < x <= 5 と言うより (0 < x) and (x <= 5) .

これらは 連鎖比較 . そして、これはそのためのドキュメントへのリンクです。

あなたが話す他のケースでは、括弧は一方の関係演算子を他方の関係演算子の前に適用させるので、もはや連鎖した比較ではありません。また TrueFalse は整数値であるため、括弧で囲まれたバージョンではそのような答えが得られます。