single
Vilkårlige Positionelle Argumenter
Stryg for at vise menuen
Du kender allerede til positionelle og optionelle argumenter. Men når en funktion kan modtage mange input eller du ikke kender dem på forhånd, kan du bruge vilkårlige positionelle argumenter. De gør det muligt for en funktion at acceptere et vilkårligt antal værdier.
Hvert argument kan være en hvilken som helst datastruktur (liste, dict, osv.). Vilkårlige argumenter gør det muligt at videregive så mange sådanne objekter som nødvendigt.
For at definere vilkårlige positionelle argumenter, placeres en stjerne * foran parameternavnet. Eksempel:
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))
Her samler *values alle de givne positionelle argumenter i en tuple. Inde i funktionen bruges variabelnavnet uden *. Resultatet er korrekt uanset hvor mange argumenter der gives.
Selvom ethvert navn kan bruges, er den almindelige og læsevenlige form *args.
1234567891011121314def 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 vist:
- Ingen argumenter →
argser(); - Ét argument →
(1,); - Flere argumenter → alle værdier vises i en tuple, f.eks.
(1, 2, 3, 'hello', [4, 5, 6]).
*args fungerer som enhver anden tuple og giver fuld fleksibilitet ved håndtering af mange input.
Da *args blot er en tuple, kan enhver logik anvendes på dens værdier – herunder betingelser. For eksempel kan du efter at have summeret alle priser kontrollere totalen og anvende forskellige regler afhængigt af resultatet.
Håndtering af tomme argumenter
Da *args samler input i et tuple, er der en mulighed for, at en bruger kalder din funktion uden at give nogen argumenter (example_function()). I dette tilfælde vil args være et tomt tuple: ().
Det er god praksis at teste, om *args er tom, før du behandler data. Dette kan nemt gøres, da tomme tuples betragtes som "falsy" i Python.
Her er to almindelige måder at håndtere et tomt *args tuple på.
Brug af if not args
Du kan bruge if not args til at opdage et tomt tuple og håndtere det med det samme, for eksempel ved at returnere 0 eller en brugerdefineret besked.
1234567891011def 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!
Kontrol af længden med len()
Alternativt kan du kontrollere, om det samlede antal argumenter er lig med nul ved hjælp af funktionen len():
1234567def 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
Swipe to start coding
Implementér en calculate_total-funktion, der beregner den samlede pris på varer i en kurv og anvender rabatter baseret på det samlede beløb.
- Brug vilkårlige positionelle argumenter kaldet prices i
calculate_total-funktionen. - Hvis der ikke gives nogen argumenter, returnér
'Your cart is empty.'. - Rabatter er gensidigt udelukkende – anvend kun den højeste relevante:
- Anvend en 20% rabat, hvis totalen er $200 eller mere.
- Anvend en 10% rabat, hvis totalen er $100 eller mere.
- Anvend ingen rabat ellers.
- Returnér det endelige beløb som en formateret streng:
'Final total: $X.XX'.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat