小编典典

Python中的字符串比较:is vs. ==

all

我注意到我正在编写的一个 Python 脚本表现得很松散,并将其追踪到一个无限循环,其中循环条件为while line is not ''.
在调试器中运行它,结果发现该行实际上是''. 当我将其更改为!=''而不是is not '',它工作正常。

此外,即使在比较 int 或 Boolean 值时,通常认为默认使用 ‘==’
是否更好?我一直喜欢使用’is’,因为我发现它在美学上更令人愉悦和pythonic(这就是我陷入这个陷阱的原因......),但我想知道它是否只是为了当你关心找到两个时保留具有相同
id 的对象。


阅读 129

收藏
2022-03-07

共1个答案

小编典典

对于所有内置的 Python 对象(如字符串、列表、字典、函数等),如果 x 为 y,则 x==y 也是 True。

不总是。NaN 是一个反例。但 通常 ,恒等式 ( is) 意味着相等 ( ==)。反之则不成立:两个不同的对象可以具有相同的值。

此外,即使在比较 int 或 Boolean 值时,通常认为默认使用 ‘==’ 是否更好?

==在比较值和is比较身份时使用。

在比较整数(或一般的不可变类型)时,您几乎总是想要前者。有一个优化允许将小整数与 进行比较is,但不要依赖它。

对于布尔值,您根本不应该进行比较。代替:

if x == True:
    # do something

写:

if x:
    # do something

对于比较Noneis None是首选== None

我一直喜欢使用’is’,因为我发现它在美学上更令人愉悦和pythonic(这就是我陷入这个陷阱的原因......),但我想知道它是否只是为了当你关心找到两个时保留具有相同
id 的对象。

是的,这正是它的用途。

2022-03-07