Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Combinatie van Positionele en Sleutelwoord Willekeurige Argumenten | Willekeurige Argumenten
Python Functies Tutorial
Sectie 3. Hoofdstuk 3
single

single

Combinatie van Positionele en Sleutelwoord Willekeurige Argumenten

Veeg om het menu te tonen

Beschouw een functie die de totale kosten van meerdere items berekent, waarbij je een willekeurig aantal prijzen en optionele keyword-instellingen zoals kortingen of belastingen kunt doorgeven.

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)

In de bovenstaande code zie je de regel settings.get('discount', 0). Omdat settings keyword-argumenten verzamelt in een standaard Python-dictionary, gebruik je de .get()-methode van de dictionary om waarden veilig op te halen.

Normaal gesproken, als je probeert een sleutel op te zoeken die niet bestaat in een dictionary met vierkante haken (zoals settings['discount']), zal Python crashen en een KeyError geven. De .get()-methode voorkomt dit door je toe te staan een standaardwaarde op te geven.

De syntaxis werkt als volgt:

dictionary.get(key, default_value)

key: de naam van de instelling die je zoekt (bijvoorbeeld 'discount' of 'tax').
default_value: de waarde die wordt teruggegeven als die sleutel niet aan de functie is doorgegeven.

Regels voor het combineren van willekeurige argumenten

Positionele willekeurige argumenten (*args)

*args verzamelt alle extra positionele argumenten in een tuple. In dit voorbeeld kan de functie een willekeurig aantal artikelprijzen accepteren zonder deze expliciet te hoeven definiëren.

Bijvoorbeeld:

calculate_total_cost(500, 250, 100)

Hier wordt *prices (500, 250, 100).

Willekeurige keyword-argumenten (**kwargs)

**kwargs verzamelt alle benoemde (keyword) argumenten in een dictionary. Hierdoor kan de functie extra benoemde instellingen accepteren, zoals discount of tax, zelfs als deze niet vooraf zijn gedefinieerd.

Bijvoorbeeld:

calculate_total_cost(1000, 500, discount=10, tax=5)

Hier wordt **settings {'discount': 10, 'tax': 5}.

Beide combineren

Je kunt zowel *args als **kwargs in dezelfde functie gebruiken voor maximale flexibiliteit — zodat je elk aantal positionele waarden en elke combinatie van benoemde instellingen kunt verwerken.

Note
Opmerking

Plaats altijd *args vóór **kwargs in de functiedefinitie – het omdraaien van de volgorde resulteert in een SyntaxError.

Taak

Veeg om te beginnen met coderen

Implementeer een functie generate_report die een willekeurig aantal numerieke scores en optionele keyword-instellingen accepteert.

  1. Gebruik *args om scores te verzamelen (noem de parameter scores) en **kwargs om optionele instellingen te verzamelen.

  2. Bereken het gemiddelde van alle opgegeven scores door alle waarden in scores op te tellen en te delen door het aantal scores:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Als er een sleutel 'label' aanwezig is in **kwargs, gebruik dan de waarde hiervan als de rapporttitel; gebruik anders 'Report'.

  4. Als er een sleutel 'passing_score' aanwezig is in **kwargs, controleer dan of het gemiddelde deze waarde haalt of overschrijdt:

    • Zo ja, voeg 'Status: Pass' toe aan het rapport.
    • Zo nee, voeg 'Status: Fail' toe.
  5. Retourneer het resultaat als een geformatteerde string: '{label} | Average: {avg:.2f} | {status}'. Als er geen 'passing_score' is opgegeven, laat dan het statusgedeelte weg: '{label} | Average: {avg:.2f}'.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

some-alt