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

single

Godtyckliga Positionella Argument

Svep för att visa menyn

Du känner redan till positionella och valfria argument. Men när en funktion kan ta emot många indata eller du inte vet dem i förväg, kan du använda godtyckliga positionella argument. De gör det möjligt för en funktion att ta emot ett obegränsat antal värden.

Note
Notera

Varje argument kan vara vilken datastruktur som helst (lista, dict, etc.). Godtyckliga argument gör att du kan skicka så många sådana objekt som behövs.

För att definiera godtyckliga positionella argument, placera en asterisk * före parameternamnet. Exempel:

12345678
# Define function with arbitrary positional arguments named values def calculate_sum(*values): return sum(values) # Test the function using different number of arguments print(calculate_sum(1, 2, 3)) print(calculate_sum(1, 2, 3, 4)) print(calculate_sum(1, 2, 3, 4, 5))

Här samlar *values alla skickade positionella argument i en tuple. Inuti funktionen används variabelnamnet utan *. Resultatet blir korrekt oavsett hur många argument som anges.

Note
Notera

Även om vilket namn som helst fungerar är den vanliga och läsbara formen *args.

1234567891011121314
def example_function(*args): print(type(args)) print(args) for arg in args: print(arg) print('Call without arguments:') example_function() print('\nCall with one argument:') example_function(1) print('\nCall with multiple arguments:') example_function(1, 2, 3, 'hello', [4, 5, 6])

Som visas:

  • Inga argument → args är ();
  • Ett argument → (1,);
  • Flera argument → alla värden visas i en tuple, t.ex. (1, 2, 3, 'hello', [4, 5, 6]).

*args fungerar som vilken annan tuple som helst och ger full flexibilitet när du hanterar många indata.

Eftersom *args bara är en tuple kan du använda valfri logik på dess värden – inklusive villkor. Till exempel, efter att ha summerat alla priser, kan du kontrollera totalen och tillämpa olika regler beroende på resultatet.

Hantering av tomma argument

Eftersom *args samlar in argumenten i en tuple, finns det en möjlighet att en användare anropar din funktion utan att skicka in några argument alls (example_function()). I detta fall kommer args att vara en tom tuple: ().

Det är god praxis att kontrollera om *args är tom innan du bearbetar data. Detta är enkelt eftersom tomma tupler betraktas som "falsy" i Python. Här är två vanliga sätt att hantera en tom *args-tuple.

Använda if not args

Du kan använda if not args för att upptäcka en tom tuple och hantera det direkt, till exempel genom att returnera 0 eller ett anpassat meddelande.

1234567891011
def calculate_average(*prices): # Checking if the tuple is empty if not prices: return 'No prices provided!' # If it's not empty, proceed with the calculation return sum(prices) / len(prices) # Testing the function print(calculate_average(10, 20, 30)) # Output: 20.0 print(calculate_average()) # Output: No prices provided!

Kontrollera längden med len()

Alternativt kan du kontrollera om det totala antalet argument är lika med noll genom att använda funktionen len():

1234567
def strict_sum(*values): if len(values) == 0: print('Warning: No values received.') return 0 return sum(values) print(strict_sum()) # Output: Warning: No values received. -> 0
Uppgift

Svep för att börja koda

Implementera en funktion calculate_total som beräknar totalpriset för varor i en kundvagn, med rabatter baserade på det totala beloppet.

  1. Använd godtyckliga positionella argument med namnet prices i funktionen calculate_total.
  2. Om inga argument anges, returnera 'Your cart is empty.'.
  3. Rabatterna är ömsesidigt uteslutande – tillämpa endast den högsta tillämpliga:
    • Tillämpa 20 % rabatt om totalen är $200 eller mer.
    • Tillämpa 10 % rabatt om totalen är $100 eller mer.
    • Ingen rabatt annars.
  4. Returnera det slutliga totalbeloppet som en formaterad sträng: 'Final total: $X.XX'.

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 1
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