python中关键字:is和==之间的区别是什么
根据python风格指南,python关键字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
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")