Parfois, vous souhaitez spécifier les arguments d'une fonction par leur nom, ce qui rend clair ce que chaque argument représente, indépendamment de leur position. En Python, ces arguments sont appelés des arguments nommés. Les arguments uniquement par mot-clé sont similaires, mais avec une particularité : ils ne peuvent être fournis que par leur nom, jamais par position.
Pour définir une fonction avec des arguments uniquement par mot-clé, vous utilisez le symbole * dans la signature de la fonction. Tous les arguments apparaissant après * ne peuvent être fournis que par leur nom.
Considérez une fonction pour calculer l'aire d'un rectangle. Elle nécessite deux arguments : length et width. De plus, elle peut accepter un argument booléen optionnel, rounded, pour décider si l'on renvoie l'aire exacte (avec décimales) ou une aire arrondie (sans décimales). Nous voulons que rounded soit un argument uniquement par mot-clé pour éviter toute confusion lors de l'appel de la fonction :
def rectangle_area(length, width, *, rounded=False):
area = length * width
return round(area) if rounded else area
print(rectangle_area(5.3, 4.2)) # Affiche 22.26, rounded n'est pas fourni donc il est par défaut False
print(rectangle_area(5.3, 4.2, rounded=True)) # Affiche 22, rounded est fourni et défini à True
print(rectangle_area(5.3, 4.2, True)) # Erreur ! rounded doit être fourni par mot-clé.
print(rectangle_area(5.3, 4.2, False)) # Erreur ! rounded doit être fourni par mot-clé.
print(rectangle_area(length=5.3, width=4.2, rounded=True)) # Affiche 22
Nous pouvons appeler cette fonction en utilisant des arguments positionnels pour length et width, et un argument nommé pour rounded. Si quelqu'un essaie de fournir le troisième argument par position, une erreur se produit.
Notez que vous pouvez toujours utiliser la syntaxe des arguments nommés pour les arguments positionnels si vous le souhaitez, car ils ne sont pas définis comme uniquement positionnels ici.
Défi : Répéter le Texte
Vous avez pour tâche d'écrire une fonction repeat_text qui répète un texte spécifié un certain nombre de fois. La fonction doit prendre deux arguments : text et times. L'argument text est la chaîne de texte à répéter et times est le nombre de répétitions.
L'argument times doit être un argument uniquement par mot-clé avec une valeur par défaut de 1, ce qui signifie que si l'argument times n'est pas fourni, la fonction doit renvoyer le texte original tel quel.
La fonction doit renvoyer une chaîne qui est le texte répété times fois.
La première ligne de l'entrée contient une chaîne text. La deuxième ligne contient un entier times.
La fonction doit renvoyer une chaîne qui est le text répété times fois.
Entrée
Sortie
Hello World!
3
Hello World!Hello World!Hello World!
Note : Il n'y a pas d'espace ni aucun autre délimiteur entre les textes répétés dans la sortie.