single
Willekeurige Positionele Argumenten
Veeg om het menu te tonen
Je kent al positionele en optionele argumenten. Maar wanneer een functie veel invoer kan ontvangen of je deze niet van tevoren weet, kun je willekeurige positionele argumenten gebruiken. Hiermee kan een functie een willekeurig aantal waarden accepteren.
Elk argument kan elke datastructuur zijn (lijst, dict, enzovoort). Willekeurige argumenten maken het mogelijk om zoveel van dergelijke objecten door te geven als nodig is.
Om willekeurige positionele argumenten te definiëren, plaats je een asterisk * voor de parameternaam. Voorbeeld:
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))
Hier verzamelt *values alle doorgegeven positionele argumenten in een tuple. Binnen de functie gebruik je de variabelenaam zonder *. Het resultaat is correct, ongeacht het aantal opgegeven argumenten.
Hoewel elke naam mogelijk is, is de gebruikelijke en leesbare vorm *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])
Zoals getoond:
- Geen argumenten →
argsis(); - Eén argument →
(1,); - Meerdere argumenten → alle waarden verschijnen in een tuple, bijvoorbeeld
(1, 2, 3, 'hello', [4, 5, 6]).
*args gedraagt zich als elke andere tuple, waardoor je volledige flexibiliteit hebt bij het verwerken van meerdere invoerwaarden.
Omdat *args gewoon een tuple is, kun je elke logica toepassen op de waarden – inclusief conditionele statements. Bijvoorbeeld, na het optellen van alle prijzen kun je het totaal controleren en verschillende regels toepassen afhankelijk van het resultaat.
Omgaan met lege argumenten
Omdat *args invoer verzamelt in een tuple, bestaat de kans dat een gebruiker je functie aanroept zonder argumenten (example_function()). In dat geval is args een lege tuple: ().
Het is een goede gewoonte om te controleren of *args leeg is voordat je de data verwerkt. Dit is eenvoudig te doen omdat lege tuples als "falsy" worden beschouwd in Python.
Hieronder staan twee veelgebruikte manieren om met een lege *args-tuple om te gaan.
Gebruik van if not args
Je kunt if not args gebruiken om een lege tuple te detecteren en direct af te handelen, bijvoorbeeld door 0 of een aangepast bericht terug te geven.
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!
De lengte controleren met len()
Als alternatief kun je controleren of het totale aantal argumenten gelijk is aan nul met de functie 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
Veeg om te beginnen met coderen
Implementeer een functie calculate_total die de totale prijs van items in een winkelwagen berekent, waarbij kortingen worden toegepast op basis van het totaalbedrag.
- Gebruik willekeurige positionele argumenten met de naam prices in de functie
calculate_total. - Als er geen argumenten zijn opgegeven, retourneer dan
'Your cart is empty.'. - Kortingen zijn onderling exclusief – pas alleen de hoogste toepasselijke korting toe:
- Pas een 20% korting toe als het totaal $200 of meer is.
- Pas een 10% korting toe als het totaal $100 of meer is.
- Geen korting toepassen in andere gevallen.
- Retourneer het uiteindelijke totaal als een geformatteerde string:
'Final total: $X.XX'.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.