single
Combinaison d’Arguments Arbitraires Positionnels et Nommés
Glissez pour afficher le menu
Considérer une fonction qui calcule le coût total de plusieurs articles tout en permettant de passer un nombre quelconque de prix et des paramètres optionnels sous forme de mots-clés, tels que des remises ou des taxes.
12345678910111213141516171819202122232425def calculate_total_cost(*prices, **settings): subtotal = sum(prices) discount = settings.get('discount', 0) tax = settings.get('tax', 0) discount_amount = subtotal * (discount / 100) taxed_amount = (subtotal - discount_amount) * (1 + tax / 100) print(f'Subtotal: ${subtotal:.2f}') if discount > 0: print(f'Discount: {discount}% (-${discount_amount:.2f})') else: print('No discount applied.') if tax > 0: print(f'Tax: {tax}% (+${taxed_amount - (subtotal - discount_amount):.2f})') print(f'Final total: ${taxed_amount:.2f}') print() # Examples of using the function calculate_total_cost(1000, 250, 50) calculate_total_cost(1200, 800, discount=10) calculate_total_cost(500, 750, 250, discount=5, tax=8)
Dans le code ci-dessus, vous remarquerez la ligne settings.get('discount', 0).
Comme settings collecte les arguments nommés dans un dictionnaire Python standard, vous utilisez la méthode .get() du dictionnaire pour récupérer les valeurs en toute sécurité.
Normalement, si vous essayez de rechercher une clé qui n'existe pas dans un dictionnaire en utilisant des crochets (comme settings['discount']), Python plantera et renverra une erreur KeyError. La méthode .get() évite cela en vous permettant de fournir une valeur par défaut de secours.
La syntaxe fonctionne ainsi :
dictionary.get(key, default_value)
key : le nom du paramètre que vous recherchez (par exemple, 'discount' ou 'tax').
default_value : la valeur à retourner si cette clé n'a pas été transmise à la fonction.
Règles pour la combinaison des arguments arbitraires
Arguments positionnels arbitraires (*args)
*args collecte tous les arguments positionnels supplémentaires dans un tuple.
Dans cet exemple, la fonction peut accepter un nombre quelconque de prix d'articles sans avoir besoin de les définir explicitement.
Par exemple :
calculate_total_cost(500, 250, 100)
Ici, *prices devient (500, 250, 100).
Arguments nommés arbitraires (**kwargs)
**kwargs collecte tous les arguments nommés (mots-clés) supplémentaires dans un dictionnaire.
Cela permet à la fonction d'accepter des paramètres nommés additionnels comme discount ou tax, même s'ils n'ont pas été prédéfinis.
Par exemple :
calculate_total_cost(1000, 500, discount=10, tax=5)
Ici, **settings devient {'discount': 10, 'tax': 5}.
Combinaison des deux
Il est possible d'utiliser à la fois *args et **kwargs dans la même fonction pour obtenir une flexibilité maximale — permettant de gérer n'importe quel nombre de valeurs positionnelles et toute combinaison de paramètres nommés.
Toujours placer *args avant **kwargs dans la signature de la fonction – inverser cet ordre entraînera une SyntaxError.
Glissez pour commencer à coder
Implémentation d'une fonction generate_report acceptant un nombre quelconque de notes numériques et des paramètres optionnels sous forme de mots-clés.
-
Utiliser
*argspour collecter les notes (nommer le paramètrescores) et**kwargspour collecter les paramètres optionnels. -
Calculer la moyenne de toutes les notes fournies en additionnant toutes les valeurs de scores puis en divisant par le nombre de scores :
Average=len(scores)sum(scores) -
Si la clé
'label'est présente dans**kwargs, utiliser sa valeur comme titre du rapport ; sinon, utiliser'Report'. -
Si la clé
'passing_score'est présente dans**kwargs, vérifier si la moyenne atteint ou dépasse cette valeur :- Si oui, ajouter
'Status: Pass'au rapport. - Sinon, ajouter
'Status: Fail'.
- Si oui, ajouter
-
Retourner le résultat sous forme de chaîne formatée :
'{label} | Average: {avg:.2f} | {status}'. Si aucun'passing_score'n'est fourni, omettre la partie statut :'{label} | Average: {avg:.2f}'.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion