Python - Arguments Keyword-Only
Bonjour, chers étudiants ! Bienvenue dans notre fascinante aventure dans le monde de la programmation Python.aujourd'hui, nous allons explorer un concept qui pourrait sembler un peu intimidant au début, mais je vous promets que vous le trouverez fascinant et incroyablement utile. On parle d'Arguments Keyword-Only !
Qu'est-ce qu'Arguments Keyword-Only ?
Imaginez que vous commandez une pizza. Vous savez que vous voulez une grande taille, mais vous n'êtes pas sûr des garnitures encore. Ne serait-ce pas génial si vous pouviez simplement dire, "Je veux une grande pizza" sans spécifier quoi que ce soit d'autre ? C'est un peu ce que font les arguments keyword-only en Python !
Les arguments keyword-only sont un type spécial de paramètre de fonction qui ne peuvent être passés que par mot-clé, pas par position. Ils ont été introduits en Python 3 pour donner aux programmeurs plus de contrôle sur la manière dont les fonctions sont appelées et pour rendre les appels de fonction plus explicites et moins sujets aux erreurs.
Voyons cela étape par étape :
Arguments de fonction de base
Avant de plonger dans les arguments keyword-only, examinons rapidement comment fonctionnent les arguments de fonction réguliers :
def saluer(nom, message):
print(f"{message}, {nom} !")
saluer("Alice", "Bonjour") # Sortie : Bonjour, Alice !
saluer("Bon matin", "Bob") # Sortie : Bob, Bon matin !
Dans cet exemple, l'ordre des arguments compte. Si nous les changeons, la sortie change et pourrait ne pas avoir de sens.
Introduction aux Arguments Keyword-Only
Maintenant, voyons comment les arguments keyword-only peuvent aider :
def saluer(*, nom, message):
print(f"{message}, {nom} !")
saluer(nom="Alice", message="Bonjour") # Sortie : Bonjour, Alice !
saluer(message="Bon matin", nom="Bob") # Sortie : Bon matin, Bob !
Remarquez l'astérisque *
avant les paramètres ? C'est le symbole magique qui rend tous les arguments suivants keyword-only. Maintenant, nous devez spécifier les noms des paramètres lors de l'appel de la fonction, mais l'ordre n'a plus d'importance !
Exemple d'Arguments Keyword-Only
Regardons un exemple plus pratique. Supposons que nous écrivons une fonction pour calculer l'aire d'un rectangle :
def calculer_aire(*, longueur, largeur):
return longueur * largeur
# Cela fonctionne :
aire = calculer_aire(longueur=10, largeur=5)
print(f"L'aire est : {aire}") # Sortie : L'aire est : 50
# Cela fonctionne également :
aire = calculer_aire(largeur=5, longueur=10)
print(f"L'aire est : {aire}") # Sortie : L'aire est : 50
# Mais cela levera une erreur :
# aire = calculer_aire(10, 5) # TypeError: calculer_aire() prend 0 arguments positionnels mais 2 ont été fournis
Dans cet exemple, nous devons spécifier longueur
et largeur
par nom. Cela rend notre code plus lisible et moins sujet aux erreurs, surtout lorsqu'il s'agit de fonctions ayant de nombreux paramètres.
Exemple : Utilisation de "sep" comme argument non keyword
Maintenant, examinons une fonction intégrée de Python qui utilise à la fois des arguments réguliers et keyword-only : la fonction print()
.
print("Bonjour", "Monde", sep="-") # Sortie : Bonjour-Monde
Ici, "Bonjour"
et "Monde"
sont des arguments positionnels, tandis que sep
est un argument par mot-clé. Mais sep
n'est pas keyword-only ; nous pouvons également l'utiliser comme un argument positionnel :
print("Bonjour", "Monde", "-") # Sortie : Bonjour-Monde
Cependant, cela peut entraîner une confusion. C'est pourquoi Python nous permet de définir nos propres fonctions avec des arguments keyword-only, garantissant que certains paramètres doivent toujours être spécifiés par nom.
Utilisation de l'argument Keyword-Only dans une méthode définie par l'utilisateur
Créons un exemple plus complexe pour illustrer la puissance des arguments keyword-only dans les méthodes définies par l'utilisateur :
def formater_nom(*, prenom, nom, milieu="", titre=""):
if milieu:
nom_complet = f"{prenom} {milieu} {nom}"
else:
nom_complet = f"{prenom} {nom}"
if titre:
return f"{titre} {nom_complet}"
else:
return nom_complet
# Essayons différentes combinaisons :
print(formater_nom(prenom="John", nom="Doe"))
# Sortie : John Doe
print(formater_nom(prenom="Jane", nom="Smith", titre="Dr."))
# Sortie : Dr. Jane Smith
print(formater_nom(prenom="Alice", milieu="Marie", nom="Johnson", titre="Mme."))
# Sortie : Mme. Alice Marie Johnson
# Cela leverait une erreur :
# print(formater_nom("Bob", "Brown")) # TypeError: formater_nom() prend 0 arguments positionnels mais 2 ont été fournis
Dans cet exemple, prenom
et nom
sont des arguments keyword-only requis, tandis que milieu
et titre
sont des arguments keyword-only optionnels avec des valeurs par défaut. Cette fonction est très flexible et claire dans son utilisation.
Résumé des méthodes d'arguments Keyword-Only
Voici un tableau résumant les méthodes que nous avons discutées :
Méthode | Description | Exemple |
---|---|---|
saluer(*, nom, message) |
Fonction de salutation de base avec des arguments keyword-only | saluer(nom="Alice", message="Bonjour") |
calculer_aire(*, longueur, largeur) |
Calcule l'aire d'un rectangle en utilisant des arguments keyword-only | calculer_aire(longueur=10, largeur=5) |
formater_nom(*, prenom, nom, milieu="", titre="") |
Formate un nom avec un nom de milieu optionnel et un titre | formater_nom(prenom="John", nom="Doe", titre="M. ") |
N'oubliez pas, l'astérisque *
dans la définition de la fonction est ce qui rend les arguments suivants keyword-only !
Conclusion
Les arguments keyword-only sont une fonctionnalité puissante en Python qui peuvent rendre votre code plus lisible, moins sujet aux erreurs et plus flexible. Ils sont particulièrement utiles lorsque vous créez des fonctions avec de nombreux paramètres ou lorsque l'ordre des arguments pourrait être confus.
À mesure que vous continuez votre aventure Python, vous trouverez de nombreuses situations où les arguments keyword-only peuvent être extrêmement utiles. Continuez à pratiquer, à explorer et, plus importantly, à vous amuser avec Python !
N'oubliez pas, chaque grand programmeur a commencé comme un débutant. Avec de la patience et de la pratique, vous écrirez des programmes Python complexes avant que vous ne le savez. Bon codage, futurs maîtres Python !
Credits: Image by storyset