De nombreux débutants en Python sont familiers avec l'écriture de conditions en utilisant if
, elif
et else
, mais à mesure que le code s'allonge et se complexifie, la lisibilité commence à diminuer. Python étant un langage qui vise à "rendre le code lisible", il propose diverses manières d'exprimer les conditions de manière plus élégante et concise.
Dans cet article, nous allons explorer des conseils et des exemples pour traiter les branchements de manière plus Pythonique, loin des conditions traditionnelles.
1. Expression conditionnelle (Conditional Expression, aka opérateur ternaire)
status = "Adulte" if age >= 18 else "Mineur"
- Possibilité d'exprimer
if/else
sur une seule ligne - Cependant, éviter les utilisations imbriquées (réduction de la lisibilité)
2. Utiliser les valeurs Truthy / Falsy
if items:
print("Il y a des éléments dans la liste.")
En Python, les valeurs suivantes sont évaluées comme False
dans les conditions :
- Conteneur vide ([]
, {}
, ''
)
- Nombre 0 (0
, 0.0
)
- None
Toutes les autres valeurs sont considérées comme True
, ce qui rend le code ci-dessus valide.
Les débutants ont souvent tendance à écrire le code suivant :
if len(items) > 0:
print("Il y a des éléments dans la liste.")
Mais en Python, len(items)
est évalué comme False si c'est 0, et True s'il est supérieur ou égal à 1, donc il est possible de simplifier cela en if items:
.
Cette approche permet de capturer les trois aspects de lisibilité, concision et style Pythonique. Cependant, si l'on omet trop d'informations, il est judicieux d'ajouter des commentaires pour clarifier l'intention.
3. Réduction de l'imbrication avec la clause de garde
def process(user):
if not user.is_active:
return "Utilisateur inactif."
# Logique suivante
- Au lieu d'imbriquer le bloc de code dans un
if
, utiliser un retour rapide ou terminer la fonction - Sortir rapidement si la condition n'est pas remplie (retour anticipé)
4. Remplacer les branchements conditionnels par un dictionnaire
def get_status(code):
return {
200: "OK",
404: "Non Trouvé",
500: "Erreur Serveur"
}.get(code, "Inconnu")
- Améliorer la lisibilité en utilisant une mappage
dict
au lieu deif-elif
- Définir une valeur par défaut avec
.get()
5. Réduire des conditions complexes avec any()
/ all()
if any([is_admin, is_staff, is_moderator]):
grant_access()
- Utiliser
any()
si l'une des conditions est True - Utiliser
all()
si toutes les conditions doivent être True
6. Traiter la valeur par défaut avec l'opérateur or
L'opérateur or
en Python renvoie la valeur à droite si la valeur à gauche est évaluée comme False. En utilisant cette propriété, il est possible de définir élégamment une valeur par défaut comme suit :
username = input("Entrez votre nom : ") or "Nom inconnu"
Ou lorsqu'une valeur de retour de fonction peut être vide, il est également possible de spécifier naturellement une valeur de secours :
items = get_items() or ["Élément par défaut"]
Cette méthode permet de spécifier une valeur alternative de manière concise et intuitive, sans avoir besoin d'écrire une condition.
🔍 Lors de l'accès à un dictionnaire,
.get('key', 'default')
vérifie en toute sécurité si la clé existe tout en renvoyant une valeur par défaut. Cependant,or
est plus adapté pour gérer des variables non dictionnaires ou des valeurs de retour de fonctions.
7. Correspondance des motifs (match-case
) - Python 3.10+
def handle_error(code):
match code:
case 400:
return "Mauvaise Demande"
case 404:
return "Non Trouvé"
case _:
return "Erreur Inconnue"
- Disponible à partir de Python 3.10
- Remplace switch-case, permet même le déstructuration
Conclusion
Rassembler les instructions conditionnelles de manière concise peut considérablement améliorer la lisibilité et la maintenabilité du code. Le style Pythonique vise non seulement à réduire le nombre de lignes, mais aussi à clarifier l'intention.
À l'avenir, en appliquant peu à peu les exemples ci-dessus lors de l'écriture de conditions, vous pourrez naturellement rédiger du code plus élégant.
Simple est mieux que complexe. — de The Zen of Python
Add a New Comment