2012-03-16 72 views
3

python关键字is应该用来代替==运算符根据python风格指南。关键字:is和==有什么区别python

但是,它们并不总是与此处显示的完全相同。为什么?实际的区别是什么,什么是正确的用法?

import unittest 

class testIS(unittest.TestCase): 
    def test_is(self): 
     self.assertEqual(1,1) 

if __name__ == '__main__': 
    unittest.main() 

其中一期工程......但下面不...

import unittest 

class testIS(unittest.TestCase): 
    def test_is(self): 
     self.assertEqual(1,1) 

if __name__ is '__main__': 
    unittest.main() 
+1

的可能重复的[在Python字符串比较:是对==](http://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs) – Mat 2012-03-16 07:11:35

+0

可能的重复[Python'=='vs'是'比较字符串','有时会失败,为什么?](http:// stackoverflow。com/questions/1504717/python-vs-is-comparison-strings-is-failures-sometimes-why) – 2012-03-16 07:12:43

回答

5

将返回True如果两个变量指向同一个对象,==如果对象简称由变量是相等的。

>>> a = [1, 2, 3] 
>>> b = a 
>>> b is a 
True 
>>> b == a 
True 
>>> b = a[:] 
>>> b is a 
False 
>>> b == a 
True 
+0

提供一个快速示例的标记为最佳答案:) – jbbiomed 2012-03-17 00:42:00

7

==检验是否相等。两个不同的对象可以相等。

is测试身份,即两者是否指同一个对象。

+0

更好的是说'==' '测试身份。 – orlp 2012-03-16 07:23:07

+1

@nightcracker:不,使用含糊不清的术语* equality *实际上是非常敏感的,因为相等的定义是由对象的类型定义的。除非您在用户定义的类中重写'__eq__',否则'=='会检查标识,而不是值。 – 2012-03-16 07:34:47

+0

@AndréCaron:默认实现是什么,是一种猜测,在Python中身份恰好是一个很好的猜测。但它绝不会改变它的语义含义,这是对价值平等的考验。 – orlp 2012-03-16 07:37:04

0

Python关键字'is'检查对象标识,而==操作符检查值是否相等。例如:

>>> if Car1 is Car2: 
>>>  [do something...] 

此代码测试分享帮助和CAR2指的是同一辆车,而

>>> if Car1 == Car2: 
>>>  [do something...] 

检查分享帮助和CAR2是同等质量的,那就是如果他们是同一型号的,颜色等

为此,__name__"__main__"返回false,因为字符串"__main__"并存储在__name__值实际上有两个不同的字符串对象。因此,要检查__name__字符串的值是否等于__main__,请使用==运算符。

0

测试两个输入是否实际上是同一个对象。这在内存中位于相同的地址。

==对其中一个输入对象调用__ eq __方法。对象然后可以定义他们自己的方法并决定什么是平等的,什么不是。

2
if money_in_wallet is money_that_was_in_wallet(two_weeks_ago): 
    print("I still live with my parents and have no income or expenses") 
elif money_in_wallet == money_that_was_in_wallet(two_weeks_ago): 
    print("Good, my budget is exactly balanced") 
+0

哈哈,完美:-) – 2012-03-16 12:56:11

+0

真是太好笑了! – jbbiomed 2012-03-17 00:41:04

相关问题