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

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

422
myusuf3 15 Июл 2010 в 20:52

5 ответов

Лучший ответ

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

Цитировать:

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

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

271
Ben Hoffstein 15 Июл 2010 в 16:55

В этом случае они одинаковы. 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"
55
Donald Miner 15 Июл 2010 в 16:55

Это зависит от того, что вы сравниваете с None. Некоторые классы имеют собственные методы сравнения, которые обрабатывают == None иначе, чем is None.

В частности, вывод a == None даже не обязательно должен быть логическим !! - частая причина ошибок.

Для конкретного примера возьмем пустой массив, в котором сравнение == реализовано поэлементно:

import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False
1
PGlivi 13 Фев 2020 в 09:32
class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False
142
unutbu 15 Июл 2010 в 18:38

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

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

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

4
jf328 30 Окт 2014 в 10:30