В чем разница между "нет" и "== нет" - PullRequest
260 голосов
/ 15 июля 2010

Я недавно сталкивался с этим синтаксисом, я не знаю о разнице.

Буду признателен, если кто-нибудь скажет мне разницу.

Ответы [ 4 ]

237 голосов
/ 15 июля 2010

Объясняется ответ здесь .

Цитировать:

Класс свободен для реализации сравнение любым способом, который он выбирает, и это можете выбрать для сравнения Никто не значит что-то (что на самом деле имеет смысл; если кто-то сказал вам реализовать объект None из царапина, как еще вы могли бы получить это сравнить истину с самим собой?).

Практически, нет большой разницы, так как пользовательские операторы сравнения встречаются редко. Но вы должны использовать is None как общее правило.

121 голосов
/ 15 июля 2010
class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False
46 голосов
/ 15 июля 2010

В этом случае они одинаковы. None является одноэлементным объектом (существует только один None).

is проверяет, является ли объект тем же объектом, а == просто проверяет, эквивалентны ли они.

Например:

p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent

Но поскольку существует только один None, они всегда будут одинаковыми, и is вернет True.

p = None
q = None
p is q # True because they are both pointing to the same "None"
2 голосов
/ 30 октября 2014

Если вы используете numpy,

if np.zeros(3)==None: pass

выдаст ошибку, когда numpy сделает поэлементное сравнение

...