Hace poco encontré esta sintaxis, no estoy al tanto de la diferencia.Cuál es la diferencia entre "is None" y "== None"
Agradecería que alguien pudiera decirme la diferencia.
Hace poco encontré esta sintaxis, no estoy al tanto de la diferencia.Cuál es la diferencia entre "is None" y "== None"
Agradecería que alguien pudiera decirme la diferencia.
La respuesta se explica here.
Para citar:
Una clase es libre de implementar comparación manera que desee, y puede optar por hacer la comparación con Ninguno significa algo (que en realidad tiene sentido; si alguien le dijera para implementar el objeto Ninguno desde cero, ¿de qué otro modo lo conseguiría hasta comparar Verdadero contra sí mismo?).
Hablando en términos prácticos, no hay mucha diferencia ya que los operadores de comparación personalizados son raros. Pero debe usar is None
como regla general.
Esa fue una lectura interesante (y corta). Y algo de información útil en 'is' v.' == '. –
Además, 'is None' es un poco (~ 50%) más rápido que' == None' :) –
@NasBanov ¿tiene un enlace al lugar donde lo lee? – myusuf3
En este caso, son lo mismo. None
es un objeto singleton (solo existe uno None
).
is
comprueba si el objeto es el mismo objeto, mientras que == simplemente verifica si son equivalentes.
Por ejemplo:
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
Pero ya que sólo hay una None
, siempre van a ser los mismos, y is
devolverá true.
p = None
q = None
p is q # True because they are both pointing to the same "None"
Esta respuesta no es correcta, como se explica en la respuesta de Ben Hoffstein debajo de http://stackoverflow.com/questions/3257919/is-none-vs-none/3257957#3257957. 'x == None' puede evaluar a' True' incluso si 'x' no es' None', sino una instancia de alguna clase con su propio operador de igualdad personalizado. – max
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Si utiliza numpy,
if np.zeros(3)==None: pass
te dará error al numpy hace la comparación elementwise
Ver [¿Hay una diferencia entre == '' y 'is' en Python?] (http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python/134659#134659) –
@ myusuf3: es posible que desee considerar cambiar la respuesta aceptada al Corriga uno. – max