not - Python Ninguna comparación: ¿debería usar "es" o==?
nonetype python (3)
Resumen:
El uso is cuando desea verificar la identidad de un objeto (por ejemplo, verificar si var es None ). Use == cuando quiera verificar la igualdad (p. Ej., ¿ var es igual a 3 ?).
Explicación:
Puede tener clases personalizadas donde my_var == None devolverá True
p.ej:
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
is cheques para la identidad del objeto. Solo hay 1 objeto None , por lo que cuando lo haces my_var is None , estás comprobando si realmente son el mismo objeto (no solo objetos equivalentes )
En otras palabras, == es una verificación de equivalencia (que se define de un objeto a otro) mientras que is verifica la identidad del objeto:
lst = [1,2,3]
lst == lst[:] # This is True since the lists are "equivalent"
lst is lst[:] # This is False since they''re actually different objects
Posible duplicado:
¿Cuándo el operador `==` no es equivalente al operador `is`? (Pitón)
Estoy usando Python 2.x.
Mi editor me da un subrayado de ''advertencia'' cuando comparo my_var == None , pero ninguna advertencia cuando uso my_var is None .
Hice una prueba en el shell Python y determiné que ambas son sintaxis válidas, pero mi editor parece decir que my_var is None es el preferido.
Es este el caso, y si es así, ¿por qué?
PEP 8 define que es mejor usar el operador is al comparar singletons.
generalmente se prefiere cuando se comparan objetos arbitrarios con singletons como None porque es más rápido y más predecible. siempre se compara por identidad de objeto, mientras que lo que hará == depende del tipo exacto de los operandos e incluso de su orden.
Esta recomendación es respaldada por PEP 8 , que establece explícitamente que "las comparaciones con singletons como None siempre deben hacerse con is or is not , never the equality operators".