我注意到我正在编写的一个 Python 脚本表现得很松散,并将其追踪到一个无限循环,其中循环条件为while line is not ''. 在调试器中运行它,结果发现该行实际上是''. 当我将其更改为!=''而不是is not '',它工作正常。
while line is not ''
''
!=''
is not ''
此外,即使在比较 int 或 Boolean 值时,通常认为默认使用 ‘==’ 是否更好?我一直喜欢使用’is’,因为我发现它在美学上更令人愉悦和pythonic(这就是我陷入这个陷阱的原因......),但我想知道它是否只是为了当你关心找到两个时保留具有相同 id 的对象。
对于所有内置的 Python 对象(如字符串、列表、字典、函数等),如果 x 为 y,则 x==y 也是 True。
不总是。NaN 是一个反例。但 通常 ,恒等式 ( is) 意味着相等 ( ==)。反之则不成立:两个不同的对象可以具有相同的值。
is
==
此外,即使在比较 int 或 Boolean 值时,通常认为默认使用 ‘==’ 是否更好?
您==在比较值和is比较身份时使用。
在比较整数(或一般的不可变类型)时,您几乎总是想要前者。有一个优化允许将小整数与 进行比较is,但不要依赖它。
对于布尔值,您根本不应该进行比较。代替:
if x == True: # do something
写:
if x: # do something
对于比较None,is None是首选== None。
None
is None
== None
我一直喜欢使用’is’,因为我发现它在美学上更令人愉悦和pythonic(这就是我陷入这个陷阱的原因......),但我想知道它是否只是为了当你关心找到两个时保留具有相同 id 的对象。
是的,这正是它的用途。