Qu'est-ce que l'opérateur and en Python ?

Découvrez l'opérateur logique and en Python : syntaxe, fonctionnement, évaluation paresseuse, exemples pratiques et bonnes pratiques pour vos conditions.
10 min de lecture
Believemy logo

Définition de l'opérateur and en Python

L'opérateur and est un opérateur logique en Python qui permet de combiner deux ou plusieurs conditions. Il retourne True uniquement si toutes les conditions évaluées sont vraies. Si l'une d'entre elles est fausse, l'expression entière retourne False.

Cet opérateur est fondamental dans la programmation Python et vous le retrouverez dans pratiquement tous les programmes, des plus simples aux plus complexes. Si vous souhaitez maîtriser Python de A à Z, notre formation complète sur Python vous guidera pas à pas dans l'apprentissage de ces concepts essentiels.

En logique booléenne, and correspond à la conjonction logique. Voici sa table de vérité :

ABA and B
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

Comme vous pouvez le constater, le résultat n'est True que lorsque les deux opérandes sont vrais simultanément.


Syntaxe et utilisation de base

La syntaxe de l'opérateur and est très simple et lisible, ce qui est cohérent avec la philosophie de Python :

PYTHON
condition1 and condition2

Vous pouvez l'utiliser directement dans des structures conditionnelles avec if, dans des boucles, ou même dans des affectations de variables. Voici un premier exemple simple :

PYTHON
age = 25
revenu = 35000

if age >= 18 and revenu >= 30000:
    print("Vous êtes éligible au prêt.")
else:
    print("Vous n'êtes pas éligible.")

Dans cet exemple, les deux conditions doivent être remplies pour que le message d'éligibilité s'affiche. Si l'âge est inférieur à 18 ou si le revenu est inférieur à 30 000, le résultat sera False.


Combiner plusieurs opérateurs and

Vous pouvez chaîner autant de conditions que nécessaire avec and :

PYTHON
nom = "Alice"
age = 30
ville = "Paris"
est_active = True

if nom and age >= 18 and ville == "Paris" and est_active:
    print("Profil valide et actif à Paris.")
Bon à savoir

Lorsque vous chaînez plusieurs conditions avec and, Python les évalue de gauche à droite et s'arrête dès qu'une condition est fausse. C'est ce qu'on appelle l'évaluation paresseuse (short-circuit evaluation).


L'évaluation paresseuse (short-circuit evaluation)

L'un des aspects les plus importants de l'opérateur and en Python est son mécanisme d'évaluation paresseuse. Python n'évalue pas toutes les conditions si ce n'est pas nécessaire :

  • Si la première condition est False, Python retourne immédiatement cette valeur sans évaluer la suite.
  • Si la première condition est True, Python passe à la condition suivante et continue ainsi jusqu'à trouver une valeur fausse ou atteindre la fin.
PYTHON
def verifier_a():
    print("Vérification de A")
    return False

def verifier_b():
    print("Vérification de B")
    return True

resultat = verifier_a() and verifier_b()
# Affiche uniquement : "Vérification de A"
# verifier_b() n'est jamais appelée

Ce comportement est extrêmement utile pour protéger votre code contre des erreurs. Voici un exemple concret :

PYTHON
ma_liste = []

# Sans évaluation paresseuse, cela provoquerait une erreur
if ma_liste and ma_liste[0] > 10:
    print("Le premier élément est supérieur à 10.")
else:
    print("Liste vide ou premier élément <= 10.")

Ici, comme ma_liste est vide (donc évaluée à False), Python ne tente jamais d'accéder à ma_liste[0], ce qui aurait provoqué une IndexError.

Attention

L'évaluation paresseuse est un outil puissant, mais veillez à ne pas en abuser. Un code trop dépendant de l'ordre d'évaluation peut devenir difficile à lire et à maintenir.


Valeurs de retour de and : au-delà du booléen

Un point souvent méconnu des débutants : l'opérateur and en Python ne retourne pas toujours True ou False. Il retourne en réalité la valeur réelle de l'un des opérandes :

  • Si le premier opérande est falsy, il est retourné directement.
  • Si le premier opérande est truthy, le second opérande est retourné.
PYTHON
# Avec des valeurs non-booléennes
print(0 and 42)          # 0 (0 est falsy)
print("" and "Bonjour")   # "" (chaîne vide est falsy)
print("Hello" and "World") # "World" (les deux sont truthy)
print(5 and 0)            # 0 (5 est truthy, retourne le second)
print([] and [1, 2, 3])   # [] (liste vide est falsy)
print(None and "texte")   # None (None est falsy)

Ce comportement permet des idiomes Python élégants pour assigner des valeurs conditionnellement :

PYTHON
utilisateur = {"nom": "Alice", "email": "alice@example.com"}

# Récupérer l'email seulement si le nom existe
email = utilisateur.get("nom") and utilisateur.get("email")
print(email)  # alice@example.com


Valeurs truthy et falsy en Python

Pour bien utiliser and, il est essentiel de connaître quelles valeurs Python considère comme falsy :

ValeurTypeÉvaluation booléenne
FalseboolFalsy
NoneNoneTypeFalsy
0intFalsy
0.0floatFalsy
""strFalsy
[]listFalsy
()tupleFalsy
{}dictFalsy
set()setsFalsy

Toute autre valeur est considérée comme truthy.


Exemples pratiques avancés

Validation de formulaire

L'opérateur and est très utilisé pour valider des données de formulaires :

PYTHON
def valider_inscription(nom, email, mot_de_passe):
    if nom and email and mot_de_passe:
        if len(nom) >= 2 and "@" in email and len(mot_de_passe) >= 8:
            return True
    return False

# Tests
print(valider_inscription("Alice", "alice@mail.com", "motdepasse123"))  # True
print(valider_inscription("", "alice@mail.com", "motdepasse123"))       # False
print(valider_inscription("Alice", "alice@mail.com", "court"))          # False


Filtrage de données avec and

Vous pouvez utiliser and dans des list en compréhension pour filtrer des données :

PYTHON
employes = [
    {"nom": "Alice", "age": 30, "departement": "IT", "actif": True},
    {"nom": "Bob", "age": 25, "departement": "RH", "actif": False},
    {"nom": "Charlie", "age": 35, "departement": "IT", "actif": True},
    {"nom": "Diana", "age": 28, "departement": "IT", "actif": True},
]

# Employés actifs du département IT ayant plus de 27 ans
resultat = [
    e["nom"] for e in employes
    if e["departement"] == "IT" and e["actif"] and e["age"] > 27
]

print(resultat)  # ['Alice', 'Charlie', 'Diana']


Vérifications chaînées avec and

Python permet de chaîner des comparaisons de manière très élégante, ce qui est équivalent à utiliser and :

PYTHON
note = 15

# Ces deux écritures sont équivalentes
if 10 <= note <= 20:
    print("Note valide")

if note >= 10 and note <= 20:
    print("Note valide")
Bon à savoir

La syntaxe chaînée 10 <= note <= 20 est un sucre syntaxique propre à Python. En interne, Python la convertit en note >= 10 and note <= 20.


Utilisation avec des fonctions lambda

L'opérateur and se combine très bien avec les fonctions lambda et les fonctions de haut niveau comme filter() :

PYTHON
nombres = range(-10, 11)

# Filtrer les nombres positifs ET pairs
positifs_pairs = list(filter(lambda x: x > 0 and x % 2 == 0, nombres))
print(positifs_pairs)  # [2, 4, 6, 8, 10]


Différence entre and, or et not

Python dispose de trois opérateurs logiques. Il est important de bien les distinguer :

OpérateurDescriptionExempleRésultat
andVrai si les deux sont vraisTrue and FalseFalse
orVrai si au moins un est vraiTrue or FalseTrue
notInverse la valeurnot TrueFalse


Priorité des opérateurs

Les opérateurs logiques ont un ordre de priorité en Python :

  1. not (priorité la plus haute)
  2. and
  3. or (priorité la plus basse)
PYTHON
# Sans parenthèses
resultat = True or False and False
print(resultat)  # True
# Équivalent à : True or (False and False) → True or False → True

# Avec parenthèses pour forcer l'ordre
resultat = (True or False) and False
print(resultat)  # False
# (True or False) → True, puis True and False → False
Attention

Utilisez toujours des parenthèses lorsque vous combinez and et or dans la même expression. Cela rend votre code plus clair et évite les erreurs subtiles liées à la priorité des opérateurs.


Différence entre and et &

Une confusion fréquente concerne la différence entre and et & :

  • and est un opérateur logique qui travaille sur des valeurs booléennes et utilise l'évaluation paresseuse.
  • & est un opérateur bit à bit (bitwise) qui travaille sur les bits individuels des nombres entiers.
PYTHON
# Opérateur logique and
print(True and False)  # False
print(5 and 3)         # 3 (retourne le second car 5 est truthy)

# Opérateur bit à bit &
print(True & False)    # False
print(5 & 3)           # 1 (0101 & 0011 = 0001 en binaire)
Attention

N'utilisez jamais & à la place de and pour des opérations logiques. Le comportement est différent et peut mener à des bugs difficiles à détecter.


Bonnes pratiques

Voici les recommandations essentielles pour utiliser and efficacement en Python :

  • Placez la condition la moins coûteuse en premier : grâce à l'évaluation paresseuse, si la première condition est fausse, les suivantes ne seront pas évaluées. Placez les vérifications simples avant les appels de fonctions coûteux.
  • Utilisez des parenthèses pour clarifier les expressions complexes, même si elles ne sont pas strictement nécessaires.
  • Évitez les lignes trop longues : si vous avez plus de 3 conditions, envisagez de les stocker dans des variables intermédiaires.
  • Préférez la lisibilité : ne sacrifiez jamais la clarté du code pour gagner une ligne.
  • Documentez les conditions complexes avec des commentaire ou des docstring pour expliquer la logique métier.
PYTHON
# ❌ Mauvaise pratique : trop de conditions sur une ligne
if a > 0 and b > 0 and c > 0 and d > 0 and e > 0 and f > 0:
    traiter()

# ✅ Bonne pratique : utiliser des variables intermédiaires
toutes_positives = all([a > 0, b > 0, c > 0, d > 0, e > 0, f > 0])
if toutes_positives:
    traiter()

# ✅ Bonne pratique : découper sur plusieurs lignes
if (a > 0
        and b > 0
        and c > 0
        and d > 0):
    traiter()


Utiliser all() comme alternative

Lorsque vous devez vérifier que toutes les conditions sont vraies dans une list, la fonction intégrée all() est une alternative élégante à de multiples and :

PYTHON
conditions = [
    age >= 18,
    revenu >= 30000,
    score_credit >= 700,
    pas_de_dettes,
]

# Équivalent à : age >= 18 and revenu >= 30000 and ...
if all(conditions):
    print("Toutes les conditions sont remplies.")
Bon à savoir

Attention : contrairement à and, all() évalue toutes les expressions de la liste avant de vérifier. L'évaluation paresseuse ne s'applique pas ici, sauf si vous utilisez un générateur.


Questions fréquentes

Question

Quelle est la différence entre and et or en Python ?

L'opérateur and retourne True uniquement si toutes les conditions sont vraies, tandis que or retourne True si au moins une condition est vraie. En termes d'évaluation paresseuse, and s'arrête au premier False rencontré, alors que or s'arrête au premier True.


Question

Peut-on utiliser and avec des types non-booléens ?

Oui, absolument. L'opérateur and fonctionne avec tous les types Python. Il évalue les valeurs en termes de truthy/falsy. Par exemple, "hello" and 42 retourne 42, car les deux valeurs sont truthy et Python retourne la dernière valeur évaluée. À l'inverse, 0 and "hello" retourne 0 car il est falsy.


Question

Combien de conditions peut-on chaîner avec and ?

Il n'y a pas de limite technique au nombre de conditions que vous pouvez chaîner avec and. Cependant, au-delà de 3 ou 4 conditions, nous vous recommandons d'utiliser des variables intermédiaires, la fonction all(), ou de découper vos conditions sur plusieurs lignes pour maintenir la lisibilité de votre code.


Question

Comment apprendre à bien utiliser les opérateurs logiques en Python ?

La maîtrise des opérateurs logiques comme and, or et not passe par la pratique régulière et une bonne compréhension des bases. Notre formation dédiée à Python couvre en profondeur les opérateurs logiques, les structures conditionnelles et de nombreux autres concepts essentiels, le tout accompagné d'exercices pratiques pour solidifier vos compétences.

Termes connexes

Découvrez notre glossaire Python

Parcourez les termes et définitions les plus couramment utilisés dans le domaine du développement avec Python.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.