【发布时间】:2011-05-27 23:27:06
【问题描述】:
我注意到有一个比较运算符is not。我应该把它直接翻译成
!=
而不是
== not
【问题讨论】:
-
Ignatio尊者评论中的链接已损坏,应为:docs.python.org/reference/expressions.html#not-in(在锚点中添加连字符)
标签: python
我注意到有一个比较运算符is not。我应该把它直接翻译成
!=
而不是
== not
【问题讨论】:
标签: python
A != B
表示“A 不等于 B”,而不是“A 不等于 B”。
【讨论】:
这不是关系比较,而是同一性。它转换为not (A is B)。
【讨论】:
扩展伊格纳西奥所说的话:
a == b 和a != b 测试两个对象是否具有相同的值。您可以覆盖对象的 __eq__ 和 __ne__ 方法以确定其含义。
a is b 和a is not b 测试两个对象是否相同。这就像在做id(a) == id(b)
【讨论】:
id(a.test) == id(b.test) 和a.test is b.test 的回答;换句话说,id(a) == id(b) 不保证在进行比较时a 和b 仍然存在,并且当a 在比较之前被垃圾收集并且b 刚刚创建时可能会导致一些意外。
a is not b 不能被解析为a is (not b),因为is 运算符的优先级高于python 中的not 运算符。所以解析它的唯一可能方法是is not。这也是为什么a == not b 是语法错误而not a == b 被解析为not (a == b)。
python 2.7.3 documentation, 5.9. Comparisons:
运算符 、==、>=、
和关于运算符is在同一章节:
运算符 is 和 is not 测试对象身份:当且仅当 x 和 y 是同一个对象时,x 是 y 为真。 x is not y 产生逆真值。
【讨论】: