python'不是'运营商

nos*_*nos 44 python

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

!= 
Run Code Online (Sandbox Code Playgroud)

代替

== not
Run Code Online (Sandbox Code Playgroud)

Tho*_*s K 59

扩展Ignacio所说的内容:

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

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

  • 请参阅:http://stackoverflow.com/questions/2906177/what-is-the-difference-between-a-is-b-and-ida-idb-in-python,尤其是Mike Graham关于`id(a. test)== id(b.test)`和`a.test是b.test`; 换言之,`id(a)== id(b)`不能保证在进行比较时'a`和`b`仍然存活,并且当比较前的'a`被垃圾收集时可能会引起一些惊喜然后创建`b`. (11认同)
  • 有趣的是要提醒一下,这违反了我的正常心理经验法则,即"非X"的优先级高于其他所有优先级.它被解析为"A(不是)B",其中"不是"是原子算子. (7认同)
  • @JonathanHartley `a is not b` 无法解析为 `a is (not b)`,因为 python 中 `is` 运算符的优先级高于 `not` 运算符。所以解析它的唯一可能的方法是“不是”。这也是为什么 `a == not b` 是一个语法错误,并且 `not a == b` 被解析为 `not (a == b)`。 (2认同)

Ign*_*ams 17

这不是关系比较,而是身份.它转化为not (A is B).


2r2*_*r2w 5

python 2.7.3文档,5.9.比较:

运算符<,>,==,> =,<=和!=比较两个对象的值.

和有关运营商在同一章:

运算符是和不是对象标识的测试:当且仅当x和y是同一个对象时,x是y.x不是y产生反向真值.


归档时间:

查看次数:

61416 次

最近记录:

9 年,8 月 前