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

这个问题在这里已经有了答案:

  • 为什么使用'=='或'is'比较Python中的字符串有时会产生不同的结果? 14个答案

  • 对于所有内置的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