Valeurs véridiques et fausses en Python: une introduction détaillée

Bienvenue

Dans cet article, vous apprendrez:

  • Que sont la vérité et les fausses valeurs.
  • Qu'est-ce qui rend une valeur vraie ou fausse.
  • Comment utiliser la bool()fonction pour déterminer si une valeur est véridique ou fausse.
  • Comment rendre les objets des classes définies par l'utilisateur véridiques ou fausses à l'aide de la méthode spéciale __bool __.

Commençons! ✨

🔹 Valeurs de vérité vs valeurs véridiques et fausses

Permettez-moi de vous présenter ces concepts en les comparant aux valeurs Trueet avec Falselesquelles nous travaillons généralement.

Les expressions avec des opérandes et des opérateurs évaluent soit Trueou Falseet elles peuvent être utilisées dans une condition ifou whilepour déterminer si un bloc de code doit s'exécuter.

Ici, nous avons un exemple:

# Expression 5 >> if 5 < 3: print("True") else: print("False") # Output False

Dans cet exemple, tout fonctionne comme prévu car nous avons utilisé une expression avec deux opérandes et un opérateur 5 < 3.

Mais que pensez-vous qu'il se passera si nous essayons d'exécuter ce code?

>>> a = 5 >>> if a: print(a)

Notez que maintenant, nous n'avons pas d'expression typique à côté du ifmot - clé, seulement une variable:

Étonnamment, le résultat est:

5

Si nous changeons la valeur de aà zéro, comme ceci:

>>> a = 0 >>> if a: print(a)

Il n'y a pas de sortie.

Je suis sûr que vous devez vous poser cette question maintenant: qu'est - ce qui a permis au code de fonctionner correctement?

La variable an'est pas une expression typique. Il n'a pas d'opérateurs et d'opérandes, alors pourquoi a-t-il évalué Trueou Falsedépendant de sa valeur?

La réponse réside dans le concept de valeurs de vérité et de fausseté, qui ne sont pas des valeurs de vérité elles-mêmes, mais qui s'évaluent à l'un Trueou l' autre False.

🔸Vérités et valeurs fausses

En Python, les valeurs individuelles peuvent être évaluées à Trueou False. Ils ne doivent pas nécessairement faire partie d'une expression plus large pour être évalués à une valeur de vérité car ils en ont déjà une qui a été déterminée par les règles du langage Python.

Les règles de base sont:

  • Les valeurs évaluées Falsesont prises en compte Falsy.
  • Les valeurs évaluées Truesont prises en compte Truthy.

Selon la documentation Python:

Tout objet peut être testé pour la valeur de vérité, pour une utilisation dans une ifou whilecondition ou opérande des opérations booléennes ci - dessous (et, ou, non).

🔹 Contexte booléen

Lorsque nous utilisons une valeur dans le cadre d'une expression plus grande, ou comme condition ifou while, nous l'utilisons dans un contexte booléen .

Vous pouvez considérer un contexte booléen comme une "partie" particulière de votre code qui nécessite qu'une valeur soit l'un Trueou l' autre ou Falsepour avoir un sens.

Par exemple, (voir ci-dessous) la condition après le ifmot - clé ou après que le whilemot - clé doit être évalué à Trueou False:

💡 Astuce: la valeur peut être stockée dans une variable. Nous pouvons écrire le nom de la variable après le mot if- whileclé ou au lieu de la valeur elle-même. Cela fournira la même fonctionnalité.

Maintenant que vous savez ce que sont les valeurs véridiques et fausses et comment elles fonctionnent dans un contexte booléen, voyons quelques exemples réels de valeurs véridiques et fausses.

🔸 Valeurs fausses

Séquences et collections:

  • Listes vides []
  • Tuples vides ()
  • Dictionnaires vides {}
  • Ensembles vides set()
  • Chaînes vides ""
  • Plages vides range(0)

Nombres

  • Zéro de tout type numérique.
  • Entier: 0
  • Flotte: 0.0
  • Complexe: 0j

Constantes

  • None
  • False

Les valeurs fausses étaient la raison pour laquelle il n'y avait pas de sortie dans notre exemple initial lorsque la valeur de aétait égale à zéro.

La valeur 0est fausse, donc la ifcondition sera Falseet le conditionnel ne sera pas exécuté dans cet exemple:

>>> a = 0 >>> if a: print(a) # No Output 

🔹 Valeurs véridiques

Selon la documentation Python:

Par défaut, un objet est considéré comme vrai .

Les valeurs authentiques comprennent:

  • Séquences ou collections non vides (listes, tuples, chaînes, dictionnaires, ensembles).
  • Valeurs numériques différentes de zéro.
  • True

C'est pourquoi la valeur de a aété imprimée dans notre exemple initial car sa valeur était 5 (une valeur de vérité):

>>> a = 5 >>> if a: print(a) # Output 5

🔸 La fonction booléenne intégrée ()

Vous pouvez vérifier si une valeur est vraie ou fausse avec la bool()fonction intégrée.

Selon la documentation Python, cette fonction:

Renvoie une valeur booléenne, c'est-à-dire l'une de Trueou False. x (l'argument) est converti en utilisant la procédure standard de test de vérité.

Il vous suffit de passer la valeur comme argument, comme ceci:

>>> bool(5) True >>> bool(0) False >>> bool([]) False >>> bool({5, 5}) True >>> bool(-5) True >>> bool(0.0) False >>> bool(None) False >>> bool(1) True >>> bool(range(0)) False >>> bool(set()) False >>> bool({5, 6, 2, 5}) True

💡 Astuce: vous pouvez également passer une variable comme argument pour tester si sa valeur est véridique ou fausse.

🔹 Exemples réels

One of the advantages of using truthy and falsy values is that they can help you make your code more concise and readable. Here we have two real examples.

Example:

We have this function print_even() that takes as an argument a list or tuple that contains numbers and only prints the values that are even. If the argument is empty, it prints a descriptive message:

def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Notice this line:

if len(data) > 0:

We can make the condition much more concise with truthy and falsy values:

if data:

If the list is empty, data will evaluate to False. If it's not empty, it will evaluate to True. We get the same functionality with more concise code.

This would be our final function:

def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Example:

We could also use truthy and falsy values to raise an exception (error) when the argument passed to a function is not valid.

>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value)

In this case, by using not data as the condition of the if statement, we are getting the opposite truth value of data for the if condition.

Let's analyze not data in more detail:

If data is empty:

  • It will be a falsy value, so data will evaluate to False.
  • not data will be equivalent to not False, which is True.
  • The condition will be True.
  • The exception will be raised.

If data is not empty:

  • It will be a truthy value, so it will evaluate to True.
  • not data will be equivalent to not True, which is False .
  • The condition will be False.
  • The exception will not be raised.

🔸 Making Custom Objects Truthy and Falsy Values

Si vous êtes familiarisé avec les classes et la programmation orientée objet, vous pouvez ajouter une méthode spéciale à vos classes pour que vos objets agissent comme des valeurs véridiques et fausses.

__bool __ ()

Avec la méthode spéciale __bool__(), vous pouvez définir une condition "personnalisée" qui déterminera quand un objet de votre classe évaluera à Trueou False.

Selon la documentation Python:

Par défaut, un objet est considéré comme vrai à moins que sa classe ne définisse une __bool__()méthode qui retourne Falseou une __len__()méthode qui retourne zéro, lorsqu'elle est appelée avec l'objet.

Par exemple, si nous avons cette classe très simple:

>>> class Account: def __init__(self, balance): self.balance = balance

Vous pouvez voir qu'aucune méthode spéciale n'est définie, donc tous les objets que vous créez à partir de cette classe seront toujours évalués comme suit True:

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True

We can customize this behavior by adding the special method __bool__():

>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0

Now, if the account balance is greater than zero, the object will evaluate to True. Otherwise, if the account balance is zero, the object will evaluate to False.

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False

💡 Tip: If __bool__() is not defined in the class but the __len__() method is, the value returned by this method will determine if the object is truthy or falsy.

🔹 In Summary

  • Truthy values are values that evaluate to True in a boolean context.
  • Falsy values are values that evaluate to False in a boolean context.
  • Falsy values include empty sequences (lists, tuples, strings, dictionaries, sets), zero in every numeric type, None, and False.
  • Truthy values include non-empty sequences, numbers (except 0 in every numeric type), and basically every value that is not falsy.
  • They can be used to make your code more concise.

I really hope you liked my article and found it helpful. Now you can work with truthy and falsy values in your Python projects. Check out my online courses. Follow me on Twitter. ⭐️