Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中关键字:is和==之间的区别是什么_Python_Syntax_Keyword - Fatal编程技术网

python中关键字:is和==之间的区别是什么

python中关键字:is和==之间的区别是什么,python,syntax,keyword,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() 哪个有效。。。但以下内容不适用于 i

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

如果两个变量指向同一对象,is将返回True;如果变量引用的对象相等,=将返回True

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

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

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

签出

。。。哪个州


操作符
不是
测试对象标识:当且仅当x和y是同一对象时,x是y才为真

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

>>> if Car1 is Car2:
>>>     [do something...]
此代码测试Car1和Car2是否指同一辆车,同时

>>> if Car1 == Car2:
>>>     [do something...]
检查Car1和Car2是否具有相同的质量,即是否具有相同的型号、颜色等


因此,
\uuuuuu name\uuuuuu
“\uuuuu main\uuuuuuu”
返回False,因为字符串
“\uuuuuu main\uuuuuuuuuuu”
和存储在
\uuuuuu name\uuuuuuu>中的值实际上是两个不同的字符串对象。因此,要检查
\uuu name\uuuu
字符串的值是否等于
\uuuu main\uuuu
,请使用==运算符。

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


==在一个输入对象上调用\uuuuuueq\uuu方法。然后,对象可以定义自己的\uuuuu eq\uuu方法,并决定什么是相等的,什么是不相等的

BERTER的可能重复是说,
==
测试值,而
测试身份。@nightcracker:不,使用模糊术语equality实际上是准确的,因为equality的定义是由对象的类型定义的。除非您在用户定义的类中重写
\uuuuuueq\uuuuu
,否则,
=
将检查标识,而不是值。@安德烈·卡隆:默认实现是猜测,在Python中,标识恰好是一个很好的猜测。但它并没有改变它的语义,这是对价值平等性的检验。@nightcracker的“价值”是一个微妙的术语。例如,我可以定义一种类型的对象的概率等于0.5,而与它们的值无关。或者我可以有一个临时对象“ignorecase(str)”,它除了与字符串进行相等性比较外,什么也做不了。讨论这些对象有什么价值对我来说似乎毫无意义,但平等性测试是有意义的。@nightcracker:该类可以使
\uuuuuueq\uuuuuu
表示任何对抽象有意义的东西,包括身份平等。这不必是值相等的。标记为提供快速示例的最佳答案:)
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")