【发布时间】:2015-08-24 12:19:52
【问题描述】:
所以我在网上查看了一些code,我遇到了一行(在第 286 行):if depth > 0 and best <= -MATE_VALUE is None and nullscore > -MATE_VALUE:
我无法理解的部分是best <= -MATE_VALUE is None。
所以我启动了解释器,看看像value1 > value2 is value3 这样的语句是如何工作的。
所以我尝试了
>>> 5 > 2 is True
False
>>> (5 > 2) is True
True
>>> 5 > (2 is True)
True
我的问题
为什么5 > 2 is True 不是True?这些东西通常是如何工作的?
谢谢。
【问题讨论】:
-
查找运算符链。这实际上不是优先级问题。第一个在逻辑上被视为
(5 > 2) && (2 is True),这就是Python 允许有意义的a < x < b构造的原因/方式。关于这个有重复。 -
FWIW,这条线对我来说似乎很奇怪——我不清楚这个表达式什么时候会是真的。如果 MATE_VALUE 是一个数字(可能是因为
-MATE_VALUE),那么它永远不会是 None (如果是,-将不起作用。)所以如果该行没有抛出异常,赢了不是总是返回 False 吗? -
我认为写这篇文章的人可能比你更困惑。实际的解释 (
best <= -MATE_VALUE and -MATE_VALUE is None) 和任何看似不正确的解释 ((best <= -MATE_VALUE) is None或best <= (-MATE_VALUE is None)) 都没有任何意义。
标签: python python-3.x