234 votes

Quelle est la différence entre "foo est rien" et "foo == None"?

Quelle est la différence entre:

if foo is None: pass

et

if foo == None: pass

La convention que j'ai vu dans la plupart de code Python (et le code que j'ai moi-même écrire) est l'ancien, mais je suis récemment tombé sur un code qui les utilise. Aucun n'est une instance (et la seule instance, IIRC) de NoneType, donc il ne devrait pas, non? Existe-il des circonstances dans lesquelles il pourrait?

277voto

Brendan Points 7674

is retourne toujours True si on compare la même instance d'objet

Alors qu' == est finalement déterminé par l' __eq__() méthode

c'est à dire


>>> class foo(object):
       def __eq__(self, other):
           return True

>>> f = foo()
>>> f == None
True
>>> f is None
False

51voto

borrego Points 501

Vous pouvez lire cette identité de l'objet et de l'équivalence.

La déclaration " est " est utilisé pour l'identité de l'objet, il vérifie si les objets font référence à la même instance (à la même adresse en mémoire).

Et '==' instruction fait référence à l'égalité (même valeur).

28voto

Tendayi Mawushe Points 10335

Un mot de prudence:

if foo:
  # do something

Est pas exactement la même chose que:

if x is not None:
  # do something

Le premier est une valeur booléenne de test et de les évaluer de faux dans des contextes différents. Il y a un certain nombre de choses qui représentent faux en une valeur booléenne tests par exemple des conteneurs vides, les valeurs booléennes. Aucun évalue à false dans cette situation, mais d'autres choses aussi.

13voto

Mykola Kharechko Points 866

(ob1 is ob2) égal à (id(ob1) == id(ob2))

13voto

truppo Points 10346

La raison en foo is None est le meilleur moyen est que vous pourriez être la manipulation d'un objet qui définit ses propres __eq__, et qui définit l'objet à égal. Donc, toujours utiliser foo is None si vous avez besoin de voir si c'est enfait None.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X