python中比较运算符和“is”运算符的优先级?

2024-04-26 02:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在网上看了一些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不是{}?这些东西一般是怎么工作的?

谢谢。在


Tags: andnonetrueifisvaluecode解释器
2条回答

您可以看到python的操作符链正在工作

5 > 2 is True

相当于

^{pr2}$

你可以从中看出这一点

>>> 5>2 is 2

返回True。在

首先,5 > 2 is True等价于(5 > 2) and (2 is True),因为python中有操作符链接(第5.9here)。在

很明显,5 > 2的计算结果为True。但是,2 is True将计算为False,因为它没有隐式转换为bool。如果强制转换,您将发现bool(2) is True生成{}。其他语句,如if-语句将为您完成此转换,因此if 2:将起作用。在

其次,is运算符和==运算符(取自here)之间有一个重要区别:

Use is when you want to check against an object's identity (e.g. checking to see if var is None). Use == when you want to check equality (e.g. Is var equal to 3?).

>> [1,2] is [1,2]
False

>> [1,2] == [1,2]
True

虽然这对本例没有直接的影响,但是您应该记住它以备将来使用。在

相关问题 更多 >