[英]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.