105 votes

Est-il sûr de remplacer '==' par 'is' pour comparer des valeurs booléennes

J'ai effectué plusieurs comparaisons booléennes :

>>> (True or False) est vrai
Vrai
>>> (True or False) == True
Vrai

Il semble que == et is sont interchangeables pour les valeurs booléennes.

Parfois, il est plus clair d'utiliser is

Je veux savoir que :

Les Vrai et Faux sont-ils pré-alloués en python?

Est-ce que bool(var) retourne toujours le même Vrai (ou Faux) avec le Vrai (ou Faux) pré-alloué?

Est-il sûr de remplacer == par is pour comparer les valeurs booléennes?


Il ne s'agit pas de la meilleure pratique.

Je veux juste connaître la vérité.

0voto

Senthil Kumaran Points 14934

== et is sont tous deux des opérateurs de comparaison, qui renverraient une valeur booléenne - True ou False. True a une valeur numérique de 1 et False a une valeur numérique de 0.

L'opérateur == compare les valeurs de deux objets et les objets comparés sont le plus souvent du même type (int vs int, float vs float). Si vous comparez des objets de types différents, alors ils sont inégaux. L'opérateur is teste l'identité des objets, 'x is y' est vrai si x et y ont le même id. Autrement dit, ce sont les mêmes objets.

Donc, lorsque vous comparez si vous comparez les valeurs de retour du même type, utilisez == et si vous comparez si deux objets sont les mêmes (qu'il s'agisse de booléen ou autre chose), vous pouvez utiliser is.

42 is 42 est True et est identique à 42 == 42.

0voto

Jens Points 1073

Une autre raison de comparer les valeurs à l'aide de == est que à la fois None et False sont des valeurs "fausses". Et parfois, il est utile d'utiliser None pour marquer une valeur comme "non définie" ou "pas de valeur" tout en considérant les valeurs True et False pour travailler avec :

def some_function(val = None):
    """Cette fonction fait quelque chose d'incroyable."""
    if val is None:
        # La valeur n'a pas été définie.
    elif val == False:
        # L'utilisateur a passé une valeur booléenne.
    elif val == True:
        # L'utilisateur a passé une valeur booléenne.
    else:
       # Coin coin.

Question quelque peu liée : Opération Python != vs "n'est pas".

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