single
Vilkårlige Posisjonsargumenter
Sveip for å vise menyen
Du kjenner allerede til posisjonelle og valgfrie argumenter. Men når en funksjon kan motta mange innverdier, eller du ikke vet dem på forhånd, kan du bruke vilkårlige posisjonelle argumenter. Disse lar en funksjon ta imot et hvilket som helst antall verdier.
Hvert argument kan være en hvilken som helst datastruktur (liste, dict, osv.). Vilkårlige argumenter lar deg sende så mange slike objekter som nødvendig.
For å definere vilkårlige posisjonelle argumenter, plasser 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 sendte posisjonsargumenter i en tuple. Inne i funksjonen bruker du variabelnavnet uten *. Resultatet blir riktig uansett hvor mange argumenter som oppgis.
Selv om hvilket som helst navn kan brukes, er den vanlige og lesbare formen *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(); - Ett argument →
(1,); - Flere argumenter → alle verdier vises i en tuple, for eksempel
(1, 2, 3, 'hello', [4, 5, 6]).
*args oppfører seg som enhver annen tuple, og gir full fleksibilitet når du håndterer mange innverdier.
Siden *args bare er en tuple, kan du bruke hvilken som helst logikk på verdiene – inkludert betingelser. For eksempel, etter å ha summert alle priser, kan du sjekke totalen og bruke ulike regler avhengig av resultatet.
Håndtering av tomme argumenter
Siden *args samler inn argumenter i en tuple, er det mulig at en bruker kaller funksjonen din uten å sende inn noen argumenter i det hele tatt (example_function()). I dette tilfellet vil args være en tom tuple: ().
Det er beste praksis å sjekke om *args er tom før du behandler data. Dette er enkelt fordi tomme tupler regnes som "falsy" i Python.
Her er to vanlige måter å håndtere en tom *args-tuple på.
Bruke if not args
Du kan bruke if not args for å oppdage en tom tuple og håndtere det umiddelbart, for eksempel ved å returnere 0 eller en egendefinert melding.
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!
Sjekke lengden med len()
Alternativt kan du sjekke om det totale antallet argumenter er lik null ved å bruke len()-funksjonen:
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
Sveip for å begynne å kode
Implementer en calculate_total-funksjon som beregner totalprisen på varer i en handlekurv, og anvender rabatter basert på totalbeløpet.
- Bruk vilkårlige posisjonelle argumenter kalt prices i
calculate_total-funksjonen. - Hvis ingen argumenter er oppgitt, returner
'Your cart is empty.'. - Rabattene er gjensidig utelukkende – kun den høyeste gjeldende rabatten skal brukes:
- Gi 20 % rabatt hvis totalen er $200 eller mer.
- Gi 10 % rabatt hvis totalen er $100 eller mer.
- Ingen rabatt ellers.
- Returner det endelige totalbeløpet som en formatert streng:
'Final total: $X.XX'.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår