Python != operation vs “is not”
在对这个问题的评论中,我看到一个建议使用
1 | result is not None |
VS
1 | result != None |
我想知道有什么区别,为什么一个会比另一个被推荐?
这是一个平等的测试。当右手和左手两侧均等时(根据他们的
这是一个身份测试。当右手侧和左手侧是同一个目标时,检查是一样的。没有方法,物体无法影响
你用
首先,让我谈一谈。如果你只想回答你的问题,请回答你的问题。
定义
对象身份:当你创建一个对象时,你可以将它指定为一个变量。然后你可以将它分配给另一个变量。另一个
1 2 3 4 5 6 | >>> button = Button() >>> cancel = button >>> close = button >>> dismiss = button >>> print(cancel is close) True |
在这一情况下,所有参照记忆中相同的对象。你只创建了一个对象,所有三个变量都参照这个对象。我们说,所有提到的相同对象都是单一对象。
Object equality:when you compare two objects,you usually don't care that it refers to the exactly same objects in memory.以对象均衡为基础,您可以为两个对象的比较制定自己的规则。当你写作的时候,你最重要的是说所以你可以使用自己的比较逻辑。
平等比较理论
理性:两个物体的确切数据相同,但并非相同。(They are not the same object in memory.)Example:Strings
1 2 3 4 5 6 7 | >>> greeting ="It's a beautiful day in the neighbourhood." >>> a = unicode(greeting) >>> b = unicode(greeting) >>> a is b False >>> a == b True |
注:我在这里使用独码弦乐,因为Python很聪明,足以在记忆中不创造新的人的情况下恢复正常弦乐。
在这里,我有两条单一的弦乐线,一条单一的弦乐线,另一条单一的弦乐线。他们的确切内容相同,但他们在记忆中不是同样的对象。然而,当我们比较它们时,我们想要它们与平等的比较。这里发生的是,单一代码对象实现了
1 2 3 4 5 6 7 8 9 10 11 12 | class unicode(object): # ... def __eq__(self, other): if len(self) != len(other): return False for i, j in zip(self, other): if i != j: return False return True |
注:
理性:两个对象有不同的数据,但如果有相同的关键数据,则视为相同的对象。Example:most types of model data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> import datetime >>> a = Monitor() >>> a.make ="Dell" >>> a.model ="E770s" >>> a.owner ="Bob Jones" >>> a.warranty_expiration = datetime.date(2030, 12, 31) >>> b = Monitor() >>> b.make ="Dell" >>> b.model ="E770s" >>> b.owner ="Sam Johnson" >>> b.warranty_expiration = datetime.date(2005, 8, 22) >>> a is b False >>> a == b True |
这里,我有两个监视器,EDOCX1&24,和EDOCX1&26。他们有同样的造型和模型。然而,他们需要同样的数据,而不是记忆中的同样的对象。然而,当我们比较它们时,我们想要它们与平等的比较。这里发生的是,监测对象实现了
1 2 3 4 5 | class Monitor(object): # ... def __eq__(self, other): return self.make == other.make and self.model == other.model |
回答你的问题
当与
通过比较身份,这可以很快地完成。Pyton checks where the object you referring to have the same memory address as the global none object-a very fast comparison of two numbers.
比如说,Python要看你的对象有
你没有实现吗?然后Python很可能会找到
当比喻Python中的其他东西时,你将使用
Consider the following:
1 2 3 4 5 6 7 | class Bad(object): def __eq__(self, other): return True c = Bad() c is None # False, equivalent to id(c) == id(None) c == None # True, equivalent to c.__eq__(None) |
是一个单词,它的特征比较总是在工作,当一个物体通过EDOCX1模拟平等比较时。
ZZU1
有些物体是单数的,而这些物体等于