繁体   English   中英

比较运算符和'是' - python中的运算符优先级?

[英]Comparison operators and 'is' - operator precedence in python?

所以我在网上看了一些代码 ,我遇到了一条线(在第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 这些东西通常如何运作?

谢谢。

你看到python的运营商链接工作

5 > 2 is True

相当于

5>2 and 2 is True

你可以看到这一点

>>> 5>2 is 2

返回True

首先, 5 > 2 is True ,相当于(5 > 2) and (2 is True)因为python中的运算符链接( 此处为第5.9节)。

很明显, 5 > 2评估结果为True。 但是, 2 is True将评估为False因为它未隐式转换为bool 如果你强制转换,你会发现bool(2) is True得到True 其他语句(如if -statement)将为您执行此转换,因此if 2:将起作用。

其次, is运算符和==运算符之间存在重要差异(取自此处 ):

使用is指您想要检查对象的身份(例如,检查if var is None )。 如果要检查相等性,请使用== (例如,Is var等于3?)。

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

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

虽然这对此示例没有直接影响,但您应该记住以后的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM