Я недавно сталкивался с этим синтаксисом, я не знаю о разнице.
Я был бы признателен, если бы кто-нибудь мог сказать мне разницу.
5 ответов
Ответ объясняется здесь.
Цитировать:
Класс может осуществлять сравнение любым способом по своему выбору, и он может выбрать, чтобы сравнение с None означало что-то (что на самом деле имеет смысл; если бы кто-то сказал вам реализовать объект None с нуля, как еще вы могли бы заставить его сравнивать True? против себя?).
Практически, нет большой разницы, так как пользовательские операторы сравнения встречаются редко. Но вы должны использовать is None
как общее правило.
В этом случае они одинаковы. 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"
Это зависит от того, что вы сравниваете с 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
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Если вы используете NumPy,
if np.zeros(3)==None: pass
Даст вам ошибку, когда NumPy делает поэлементное сравнение
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.