【问题标题】:python 'is not' operatorpython'不是'运算符
【发布时间】:2011-05-27 23:27:06
【问题描述】:

我注意到有一个比较运算符is not。我应该把它直接翻译成

!= 

而不是

== not

【问题讨论】:

标签: python


【解决方案1】:
A != B

表示“A 不等于 B”,而不是“A 不等于 B”。

【讨论】:

  • 有什么区别?如果 A 不等于 B,则 A 必须等于 something 让我们假设 A 等于 C。这意味着 C 不等于 B。因此,A 不等于 B(C)。
  • @John:“A 等于 C”、“A 不等于 B”、“C 不等于 B”并不意味着“(not(B)) 等于到 C";由此得出“A 不等于 B”的结论是错误的推理。
  • 此评论是基于对问题的误解。 “A 不是 B”不会被解析为“A 是(不是 B)”。它被解析为“A(不是)B”,其中“is not”是一个测试“not(A is B)”的运算符。
【解决方案2】:

这不是关系比较,而是同一性。它转换为not (A is B)

【讨论】:

    【解决方案3】:

    扩展伊格纳西奥所说的话:

    a == ba != b 测试两个对象是否具有相同的。您可以覆盖对象的 __eq____ne__ 方法以确定其含义。

    a is ba is not b 测试两个对象是否相同。这就像在做id(a) == id(b)

    【讨论】:

    • 除非没有竞态条件
    • @Lie Ryan:想详细说明一下吗?我不知道。
    • 参见:stackoverflow.com/questions/2906177/…,尤其是 Mike Graham 对id(a.test) == id(b.test)a.test is b.test 的回答;换句话说,id(a) == id(b) 不保证在进行比较时ab 仍然存在,并且当a 在比较之前被垃圾收集并且b 刚刚创建时可能会导致一些意外。
    • 有趣的是,这打破了我正常的心理经验法则,即“非 X”的优先级高于其他所有内容。它被解析为“A(不是)B”,其中“不是”是一个原子运算符。
    • @JonathanHartley a is not b 不能被解析为a is (not b),因为is 运算符的优先级高于python 中的not 运算符。所以解析它的唯一可能方法是is not。这也是为什么a == not b 是语法错误而not a == b 被解析为not (a == b)
    【解决方案4】:

    python 2.7.3 documentation, 5.9. Comparisons:

    运算符 、==、>=、

    和关于运算符is在同一章节:

    运算符 is 和 is not 测试对象身份:当且仅当 x 和 y 是同一个对象时,x 是 y 为真。 x is not y 产生逆真值。

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 2015-05-28
      • 2019-02-02
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2016-01-17
      • 2016-04-06
      • 2022-01-16
      相关资源
      最近更新 更多