首页 文章

Python中的字符串比较:是vs = = [duplicate]

提问于
浏览
471

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

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

另外,通常认为默认使用'=='更好,即使在比较int或Boolean值时也是如此?我总是喜欢使用'是',因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象 .

4 回答

  • 25

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

    不总是 . NaN是一个反例 . 但通常,身份( is )意味着平等( == ) . 反之亦然:两个不同的对象可以具有相同的值 .

    另外,通常认为默认使用'=='更好,即使在比较int或Boolean值时也是如此?

    在比较值时使用 == ,在比较身份时使用 is .

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

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

    if x == True:
        # do something
    

    写:

    if x:
        # do something
    

    为了与 None 进行比较, is None 优先于 == None .

    我总是喜欢使用'是',因为我觉得它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心寻找两个具有相同id的对象 .

    是的,这正是它的用途 .

  • 63

    我想展示一个关于 is== 如何参与不可变类型的小例子 . 试试看:

    a = 19998989890
    b = 19998989889 +1
    >>> a is b
    False
    >>> a == b
    True
    

    is 比较内存中的两个对象, == 比较它们的值 . 例如,您可以看到Python缓存了小整数:

    c = 1
    b = 1
    >>> b is c
    True
    

    比较值时应使用 == ,比较身份时应使用 is . (另外,从英语的角度来看,"equals"与"is"不同 . )

  • 234

    逻辑没有缺陷 . 该声明

    如果x是y,那么x == y也是True

    never 应该被理解为

    如果x == y则x为y

    读者认为逻辑陈述的反转是正确的,这是一个逻辑错误 . 见http://en.wikipedia.org/wiki/Converse_(logic)

  • 554

    This question

    你阅读的逻辑

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

    有点缺陷 .

    如果 is 适用,那么 == 将为True,但它不适用于反向 . == 可能会产生True,而 is 会产生False .

相关问题