为什么表达式0<0=0在Python中返回false?

为什么表达式0<0=0在Python中返回false?

查看Python2.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 == 0False>>> (0) < (0 == 0)True>>> (0 < 0) == 0True>>> 0 < (0 == 0)True


猛跑小猪
浏览 880回答 3
3回答

幕布斯7119047

我相信Python对于关系运算符的序列有特殊的案例处理,使范围比较更容易表达。更好的是能说0 < x <= 5比说(0 < x) and (x <= 5).这些叫做链式比较..这是他们的文档链接。对于您所讨论的其他情况,括号强制一个关系运算符在另一个之前应用,因此它们不再是链式比较。既然True和False将值设为整数,可以从括号大小的版本中得到您所做的答案。

当年话下

你所经历的奇怪行为来自于蟒蛇的连锁能力。因为它发现0不小于0,所以它决定整个表达式的计算结果为false。一旦将其分解为单独的条件,就会更改功能。它最初是在测试a < b && b == c你最初的声明a < b == c.另一个例子:>>>&nbsp;1&nbsp;<&nbsp;5&nbsp;<&nbsp;3False>>>&nbsp;(1&nbsp;<&nbsp;5)&nbsp;<&nbsp;3True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python