То, что является различием между, “не является Ни одним” и “== Ни один”

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

Я ценил бы его, если кто-то мог бы сказать мне различие.

287
задан Emna 16 May 2016 в 06:54
поделиться

3 ответа

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

Цитирую:

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

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

259
ответ дан 23 November 2019 в 01:48
поделиться
class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False
132
ответ дан 23 November 2019 в 01:48
поделиться

В данном случае они одинаковы. 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"
52
ответ дан 23 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: