299 votes

Comparaison de None en Python : dois-je utiliser "is" ou == ?

Mon éditeur me prévient quand je compare my_var == None mais aucun avertissement lorsque j'utilise my_var is None .

J'ai fait un test dans le shell Python et j'ai déterminé que les deux syntaxes sont valides, mais mon éditeur semble dire que my_var is None est préférable.

Est-ce le cas, et si oui, pourquoi ?

8 votes

PEP 8 indique quelque part que vous devez comparer aux singletons en utilisant is - python.org/dev/peps/pep-0008/#programming-recommendations

2 votes

Ce poster parle de Python 3, et ma question concerne Python 2.x. Je ne suis pas sûr que ce soit une différence assez importante pour justifier les deux restants, mais j'ai édité la question pour l'inclure juste au cas où.

4 votes

Je ne pense pas que cette question soit vraiment un doublon. L'autre portait sur == vs is en général, celle-ci porte sur None en particulier.

-3voto

Aarav Dave Points 21

Nous pouvons prendre la liste par exemple. Regardez ici :

a = list('Hello')
b = a
c = a[:]

Tous ont la même valeur :

['H', 'e', 'l', 'l', 'o']
['H', 'e', 'l', 'l', 'o']
['H', 'e', 'l', 'l', 'o']

is fait référence à l'emplacement mémoire réel, qu'il s'agisse de l'objet d'intérêt spécifique :

print(a is b)
print(a is c)

Nous obtenons maintenant le résultat souhaité.

True
False

PEP 8 le mentionne également, en disant "les comparaisons avec des singletons comme None doivent toujours être faites avec is ou is not, jamais avec les opérateurs d'égalité".

is est également plus rapide.

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