Je suis récemment tombé sur cette syntaxe, je ne suis pas conscient de la différence.
J'apprécierais que quelqu'un me dise la différence.
La réponse est expliquée ici .
Citer:
Une classe est libre d’appliquer la comparaison comme elle le souhaite et elle peut choisir de faire la comparaison avec None. contre lui-même?).
Pratiquement, il n'y a pas beaucoup de différence puisque les opérateurs de comparaison personnalisés sont rares. Mais vous devriez utiliser is None
en règle générale.
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Dans ce cas, ils sont les mêmes. None
est un objet singleton (il n'existe qu'un seul None
).
is
vérifie si l'objet est le même objet, tandis que == vérifie simplement s'ils sont équivalents.
Par exemple:
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
Mais comme il n'y a qu'un seul None
, ils seront toujours les mêmes et is
retournera True.
p = None
q = None
p is q # True because they are both pointing to the same "None"
Si vous utilisez numpy,
if np.zeros(3)==None: pass
vous donnera une erreur lorsque numpy fait la comparaison élémentaire