Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Kombination av Positionella och Nyckelords Godtyckliga Argument | Godtyckliga Argument
Pythonfunktioner Handledning
Avsnitt 3. Kapitel 3
single

single

Kombination av Positionella och Nyckelords Godtyckliga Argument

Svep för att visa menyn

Tänk på en funktion som beräknar den totala kostnaden för flera artiklar och låter dig ange valfritt antal priser samt valfria nyckelordsinställningar såsom rabatter eller skatter.

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)

I koden ovan ser du raden settings.get('discount', 0). Eftersom settings samlar nyckelordsargument i en vanlig Python-dictionary använder du dictionaryns .get()-metod för att hämta värden på ett säkert sätt.

Normalt, om du försöker slå upp en nyckel som inte finns i en dictionary med hakparenteser (som settings['discount']), kommer Python att krascha och kasta ett KeyError. Metoden .get() förhindrar detta genom att låta dig ange ett standardvärde som reserv.

Syntaxen fungerar så här:

dictionary.get(key, default_value)

key: namnet på inställningen du letar efter (t.ex. 'discount' eller 'tax').
default_value: värdet som returneras om den nyckeln inte skickades in i funktionen.

Regler för att kombinera godtyckliga argument

Positionella godtyckliga argument (*args)

*args samlar alla extra positionella argument i en tuple. I det här exemplet kan funktionen ta emot valfritt antal varupriser utan att behöva definiera dem uttryckligen.

Till exempel:

calculate_total_cost(500, 250, 100)

Här blir *prices till (500, 250, 100).

Nyckelords-godtyckliga argument (**kwargs)

**kwargs samlar alla namngivna (nyckelords-)argument i en ordbok. Detta gör att funktionen kan ta emot ytterligare namngivna inställningar som discount eller tax, även om de inte var fördefinierade.

Till exempel:

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

Här blir **settings till {'discount': 10, 'tax': 5}.

Kombinera båda

Du kan använda både *args och **kwargs i samma funktion för att uppnå maximal flexibilitet — vilket gör att du kan hantera valfritt antal positionella värden och valfri kombination av namngivna inställningar.

Note
Observera

Placera alltid *args före **kwargs i funktionssignaturen – om ordningen omvänds uppstår ett SyntaxError.

Uppgift

Svep för att börja koda

Implementera en funktion generate_report som accepterar ett godtyckligt antal numeriska poäng och valfria inställningar som nyckelord.

  1. Använd *args för att samla in poäng (namnge parametern scores) och **kwargs för att samla in valfria inställningar.

  2. Beräkna medelvärdet av alla angivna poäng genom att summera alla värden i scores och dividera med antalet poäng:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Om en 'label'-nyckel finns i **kwargs, använd dess värde som rapporttitel; annars använd 'Report'.

  4. Om en 'passing_score'-nyckel finns i **kwargs, kontrollera om medelvärdet uppnår eller överstiger detta värde:

    • Om ja, lägg till 'Status: Pass' i rapporten.
    • Om nej, lägg till 'Status: Fail'.
  5. Returnera resultatet som en formaterad sträng: '{label} | Average: {avg:.2f} | {status}'. Om ingen 'passing_score' anges, utelämna statusdelen: '{label} | Average: {avg:.2f}'.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt