Python中的string比较:is vs. ==
我注意到我正在写的一个Python脚本是松鼠行事,并追溯到一个无限循环,其中循环条件是while line is not ''
。 在debugging器中运行它,事实certificate该行实际上是''
。 当我把它改成!=''
而is not ''
,它工作正常。
另外,通常认为只要使用'=='默认情况下更好,即使比较int或布尔值? 我一直喜欢用'是',因为我觉得它更美观和pythonic(这就是我陷入这个陷阱…),但我想知道是否只是为了当你关心find两个具有相同ID的对象。
对于所有内置的Python对象(如string,列表,字典,函数等),如果x是y,那么x == y也是True。
不总是。 NaN是一个反例。 但通常 ,身份( is
)意味着平等( ==
)。 相反是不正确的:两个不同的对象可以具有相同的值。
另外,通常认为只要使用'=='默认情况下更好,即使比较int或布尔值?
比较值时使用==
,比较身份时。
在比较int(或者一般的不可变types)时,你总是希望前者。 有一个优化,可以让小的整数与is
进行比较,但不要依赖它。
对于布尔值,你不应该进行比较。 代替:
if x == True: # do something
写:
if x: # do something
为了与None
进行比较, is None
是优于== None
。
我一直喜欢用'是',因为我觉得它更美观和pythonic(这就是我陷入这个陷阱…),但我想知道是否只是为了当你关心find两个具有相同ID的对象。
是的,这正是它的目的。
我想展示一个关于is
和==
如何涉及不可变types的小例子。 尝试一下:
a = 19998989890 b = 19998989889 +1 >>> a is b False >>> a == b True
比较内存中的两个对象, ==
比较它们的值。 例如,你可以看到Pythoncaching了小整数:
c = 1 b = 1 >>> b is c True
比较值时应使用==
,并且在比较身份时。 (另外,从英文angular度来看,“等”与“是”不同)。
逻辑不是有缺陷的。 该声明
如果x是y,那么x == y也是真的
绝不应该被解读为意思
如果x == y,那么x是y
假设逻辑陈述的反面是正确的,读者的逻辑错误是逻辑错误。 见http://en.wikipedia.org/wiki/Converse_(logic);
看到这个问题
你的阅读逻辑
对于所有内置的Python对象(如string,列表,字典,函数等),如果x是y,那么x == y也是True。
有点瑕疵。
如果适用,则==
为真,但不适用于相反。 ==
可能产生True,而产生False。