关键字:is和=在python中有什么区别

时间:2012-03-16 07:07:46

标签: python syntax keyword

根据python样式指南,应该使用python关键字is代替==运算符。

然而,它们并不总是与此处所示完全相同。为什么?实际差异是什么,适当的用法是什么?

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()

6 个答案:

答案 0 :(得分:7)

==测试平等。两个不相同的对象可以相等。

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

答案 1 :(得分:5)

如果两个变量指向同一个对象,则

将返回True,如果变量引用的对象相等,则 ==

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

答案 2 :(得分: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")

答案 3 :(得分:0)

退房......

http://docs.python.org/reference/expressions.html#not-in

......哪个州......

运算符isis not测试对象标识:当且仅当x和y是同一个对象时,x是y才为真

答案 4 :(得分:0)

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

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

此代码测试Car1和Car2是否指向同一辆车,而

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

检查Car1和Car2的质量是否相同,即它们是否具有相同的型号,颜色等。

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

答案 5 :(得分:0)

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

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