这个问题在这里已有答案:
- Why does comparing strings in Python using either '==' or 'is' sometimes produce a different result? 15个答案
我注意到我写的一个Python脚本是松散的,并追溯到一个无限循环,循环条件是 while line is not ''
. 在调试器中运行它,结果发现该行实际上是 ''
. 当我将其更改为 !=''
而不是 is not ''
时,它运行正常 .
另外,通常认为默认使用'=='更好,即使在比较int或Boolean值时也是如此?我总是喜欢使用'是',因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象 .
4 回答
不总是 . NaN是一个反例 . 但通常,身份(
is
)意味着平等(==
) . 反之亦然:两个不同的对象可以具有相同的值 .在比较值时使用
==
,在比较身份时使用is
.在比较整数(或一般的不可变类型)时,你几乎总是想要前者 . 有一个优化允许将小整数与
is
进行比较,但不要依赖它 .对于布尔值,您根本不应该进行比较 . 代替:
写:
为了与
None
进行比较,is None
优先于== None
.是的,这正是它的用途 .
我想展示一个关于
is
和==
如何参与不可变类型的小例子 . 试试看:is
比较内存中的两个对象,==
比较它们的值 . 例如,您可以看到Python缓存了小整数:比较值时应使用
==
,比较身份时应使用is
. (另外,从英语的角度来看,"equals"与"is"不同 . )逻辑没有缺陷 . 该声明
never 应该被理解为
读者认为逻辑陈述的反转是正确的,这是一个逻辑错误 . 见http://en.wikipedia.org/wiki/Converse_(logic)
见This question
你阅读的逻辑
有点缺陷 .
如果
is
适用,那么==
将为True,但它不适用于反向 .==
可能会产生True,而is
会产生False .