Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Kombination von Positionsabhängigen und Benannten Beliebigen Argumenten | Beliebige Argumente
Python-Funktionen-Tutorial
Abschnitt 3. Kapitel 3
single

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.

12345678910111213141516171819202122232425
def 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.

Note
Hinweis

Immer *args vor **kwargs in der Funktionssignatur platzieren – eine umgekehrte Reihenfolge führt zu einem SyntaxError.

Aufgabe

Wischen, um mit dem Codieren zu beginnen

Implementierung einer Funktion generate_report, die eine beliebige Anzahl numerischer Bewertungen sowie optionale Schlüsselwort-Einstellungen akzeptiert.

  1. Verwendung von *args, um Bewertungen zu sammeln (Parametername: scores), und **kwargs, um optionale Einstellungen zu erfassen.

  2. Berechnung des Durchschnitts aller angegebenen Bewertungen durch Summieren aller Werte in scores und Division durch die Anzahl der Bewertungen:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Falls ein Schlüssel 'label' in **kwargs vorhanden ist, dessen Wert als Berichtstitel verwenden; andernfalls 'Report' nutzen.

  4. Falls ein Schlüssel 'passing_score' in **kwargs vorhanden 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.
  5. 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

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

some-alt