Python is vs ==
Possible Duplicate:
String comparison in Python: is vs. ==
When is the == operator not equivalent to the is operator? (Python)
号
我对Python还是很陌生。我听说有人说使用is,而不是==,因为"这不是c"。但是我有一些代码x is 5,它没有按预期工作。
那么,按照正确的python/pep风格,什么时候使用is,什么时候使用==?
- 有关is与==的解释,请参见本问题。
- 很多很棒的链接。您唯一天真地想使用is的时间是不测试。否则,违约给==。
- 无论你听到谁说"使用is,而不是=="是完全错误的,你应该接受他们用一粒盐给出的任何其他建议。在python中几乎不需要使用is。
- @我是在几天前读到的关于这个问题的评论中看到的。
应该使用==比较两个值。您应该使用is查看两个名称是否绑定到同一对象。
您几乎不应该使用x is 5,因为根据实现的不同,小整数可能会被实习生。这可能导致令人惊讶的结果:
1 2 3 4 5 6
| >>> x = 256
>>> x is 256
True
>>> x = 257
>>> x is 257
False |
- 当我执行第二个任务和第二个is检查时,它仍然返回true。我使用的是python 2.7。编辑:实际上,我使用1和2作为第一个/第二个值,然后尝试256/257,得到与您列出的结果相同的结果。这是怎么回事?
- @manny d:在您使用的Python实现中,为提高效率,对256个或更少的数字进行了实习生。每次写256,你都会得到完全相同的对象。每次你写257,你都会得到一个新的,不同的对象,当然也有相同的值。但您不应该依赖于这种行为,因为它在未来的版本中可能会发生变化。
- 也许一个更好的例子是两个不同的对象,它们作为相等的值进行比较。比如说1和1.0。这个例子有点深奥,当有更明显的主流在手。
- @曼尼德,你也可以用短线来表现这种奇怪的行为,因为他们也可以被拘留。你也可以用单体船,比如True、False和None。
这两个运算符的含义不同。
- is测试对象身份。这两个操作数是指同一个对象吗?
- ==检验值的相等性。这两个操作数的值相同吗?
当比较x和5时,你总是对价值感兴趣,而不是对持有价值的对象感兴趣。