Я недавно столкнулся с этим синтаксисом, я не знаю о различии.
Я ценил бы его, если кто-то мог бы сказать мне различие.
Ответ объясняется здесь.
Цитирую:
Класс волен реализовать сравнение любым способом, который он выберет, и он может выбрать сравнение с None означает что-то (что на самом деле имеет смысл; если бы кто-то сказал вам реализовать объект None с с нуля, как бы вы еще заставили его сравнивать True с самим собой?).
С практической точки зрения, разница невелика, поскольку пользовательские операторы сравнения встречаются редко. Но вы должны использовать is None
как общее правило.
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
В данном случае они одинаковы. 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"