single
Kombination von Positionsabhängigen und Benannten Beliebigen Argumenten
Swipe um das Menü anzuzeigen
Betrachte eine Funktion, die die Gesamtkosten mehrerer Artikel berechnet und es ermöglicht, beliebig viele Preise sowie optionale Schlüsselwort-Einstellungen wie Rabatte oder Steuern zu übergeben.
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)
Im obigen Code fällt die Zeile settings.get('discount', 0) auf.
Da settings die Schlüsselwortargumente in einem normalen Python-Wörterbuch sammelt, wird die .get()-Methode des Wörterbuchs verwendet, um Werte sicher abzurufen.
Normalerweise führt der Versuch, einen nicht vorhandenen Schlüssel mit eckigen Klammern (wie settings['discount']) nachzuschlagen, zu einem Absturz von Python und einem KeyError. Die .get()-Methode verhindert dies, indem sie ermöglicht, einen Standardwert als Rückgabe zu definieren.
Die Syntax funktioniert wie folgt:
dictionary.get(key, default_value)
key: der Name der Einstellung, nach der gesucht wird (z. B. 'discount' oder 'tax').
default_value: der Wert, der zurückgegeben wird, falls dieser Schlüssel nicht an die Funktion übergeben wurde.
Regeln für die Kombination von beliebigen Argumenten
Positionsbasierte beliebige Argumente (*args)
*args sammelt alle zusätzlichen positionsbasierten Argumente in einem Tupel.
In diesem Beispiel kann die Funktion eine beliebige Anzahl von Artikelpreisen aufnehmen, ohne dass diese explizit definiert werden müssen.
Beispiel:
calculate_total_cost(500, 250, 100)
Hier wird *prices zu (500, 250, 100).
Schlüsselwort-basierte beliebige Argumente (**kwargs)
**kwargs sammelt alle benannten (Schlüsselwort-)Argumente in einem Dictionary.
Dadurch kann die Funktion zusätzliche benannte Einstellungen wie discount oder tax akzeptieren, auch wenn diese nicht vordefiniert wurden.
Beispiel:
calculate_total_cost(1000, 500, discount=10, tax=5)
Hier wird **settings zu {'discount': 10, 'tax': 5}.
Kombination beider Varianten
Es ist möglich, sowohl *args als auch **kwargs in derselben Funktion zu verwenden, um maximale Flexibilität zu erreichen — so können beliebig viele positionsbasierte Werte und beliebige Kombinationen benannter Einstellungen verarbeitet werden.
Immer *args vor **kwargs in der Funktionssignatur platzieren – eine umgekehrte Reihenfolge führt zu einem SyntaxError.
Wischen, um mit dem Codieren zu beginnen
Implementierung einer Funktion generate_report, die eine beliebige Anzahl numerischer Bewertungen sowie optionale Schlüsselwort-Einstellungen akzeptiert.
-
Verwendung von
*args, um Bewertungen zu sammeln (Parametername:scores), und**kwargs, um optionale Einstellungen zu erfassen. -
Berechnung des Durchschnitts aller angegebenen Bewertungen durch Summieren aller Werte in scores und Division durch die Anzahl der Bewertungen:
Average=len(scores)sum(scores) -
Falls ein Schlüssel
'label'in**kwargsvorhanden ist, dessen Wert als Berichtstitel verwenden; andernfalls'Report'nutzen. -
Falls ein Schlüssel
'passing_score'in**kwargsvorhanden ist, prüfen, ob der Durchschnitt diesen Wert erreicht oder übersteigt:- Falls ja,
'Status: Pass'zum Bericht hinzufügen. - Falls nein,
'Status: Fail'hinzufügen.
- Falls ja,
-
Rückgabe des Ergebnisses als formatierter String:
'{label} | Average: {avg:.2f} | {status}'. Falls kein'passing_score'angegeben ist, den Status-Teil weglassen:'{label} | Average: {avg:.2f}'.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen