Python中的字符串比较:is vs. ==
这个问题在这里已经有了答案:
对于所有内置的Python对象(如字符串,列表,字典,函数等),如果x是y,那么x == y也是True。
不总是。 NaN是一个反例。 但通常,身份( is
)意味着平等( ==
)。 反过来是不正确的:两个不同的对象可以具有相同的值。
另外,即使在比较int或布尔值时,默认情况下只使用'=='通常会更好吗?
您可以使用==
比较值,并在is
比较的身份时。
比较ints(或一般不可变类型)时,你几乎总是希望前者。 有一个优化可以让小整数与is
进行比较,但不要依赖它。
对于布尔值,你不应该进行比较。 代替:
if x == True:
# do something
写:
if x:
# do something
与None
比较, is None
是优于== None
。
我一直喜欢用'是',因为我觉得它更美观和pythonic(这是我陷入这个陷阱......),但我想知道它是否只是为了当你关心找到两个具有相同ID的对象。
是的,这正是它的目的。
我想展示一个关于is
和==
如何涉及不可变类型的小例子。 尝试一下:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
is
两个对象在内存中进行比较, ==
比较它们的值。 例如,您可以看到Python缓存了小整数:
c = 1
b = 1
>>> b is c
True
你应该使用==
比较值时,和is
比较认同的时候。 (另外,从英语的角度来看,“等于”与“是”不同。)
逻辑没有缺陷。 该声明
如果x是y,那么x == y也是真的
不应该被解读为
如果x == y,那么x是y
读者假设逻辑陈述的反面是真实的,这是一个逻辑错误。 见http://en.wikipedia.org/wiki/Converse_(logic)
链接地址: http://www.djcxy.com/p/58531.html上一篇: String comparison in Python: is vs. ==
下一篇: fast algorithm