Det finns tre typer av argument som en Python-funktion kan acceptera: standard, variabel (*args) och nyckelord (**kwargs). Standardargument är de enklaste men har begränsad funktionalitet. Å andra sidan ger *args och **kwargs dig möjlighet att göra dina funktioner mer flexibla genom att acceptera ett varierande antal ingångar.
Vilken typ av argumentöverföring du väljer beror på typen av din funktion och din egen föredragna programmeringsstil.
Grundläggande funktioner i Python
För att förstå hur de två variabelargumenten i Python-funktionerna fungerar är det viktigt att förstå varför de existerar i första hand. En enkel funktion deklarerar ett fast antal anonyma argument så här:
defaddnum(a, b, c):
lämna tillbaka a + b + c
Den här funktionen fungerar bra, men det finns utrymme för förbättringar. Det största problemet är att det bara hanterar två argument, så det kan bara lägga ihop två tal. Vad händer om du vill lägga till två eller fyra siffror? Denna funktion tillåter dig inte att göra det. Att skicka fler eller färre argument än vad funktionen accepterar leder till ett TypeError.
Naturligtvis kan du skapa fler funktioner för att acceptera olika antal argument. Men det är obekvämt och kommer inte att skala bra alls. Du måste också skapa en ny funktion varje gång du vill hantera ett nytt antal ingångar.
Det är där variabla argument och sökordsargument kommer in. Med *args och **kwargs kan du definiera flexibla funktioner som kan ta ett varierande antal ingångar.
Vad är *args i Python?
Huvudidén bakom *args i Python är att låta dig skicka ett variabelt antal ingångar till din funktion. Detta kommer väl till pass i olika applikationer. Tänk till exempel på ett kalkylatorprogram där du vill ge användaren möjlighet att lägga till två eller flera tal och returnera summan.
Observera att args bara är ett variabelnamn; det är * som är viktigt. Du kan använda vilket giltigt namn som helst för ditt variabelargument, så länge du inkluderar *.
Hur man använder *args
Du kan ändra addnum-funktionen för att ta ett variabelt antal ingångar enligt följande:
defaddnum(*args):
totalt = 0för num i args:
totalt = totalt + antal
lämna tillbaka total
Kodavsnittet ovan använder en for-loop att iterera genom de medföljande ingångarna.
Du kan sedan anropa addnum-funktionen med variabla argument och det kommer att fungera utan att kasta ett fel:
skriva ut(tilläggsnummer(10, 1, 12, 12, 4, 54, 5)) ## returnerar 98
skriva ut(tilläggsnummer(14, 54, 5)) # ger 73
skriva ut(tilläggsnummer(10, 5)) # returnerar 15
Vad är **kwargs i Python?
Medan både *args och **kwargs tillåter oss att skicka ett variabelt antal ingångar till funktioner, är det senare specifikt för nyckelordsargument. Om du inte vet är nyckelordsargument bara snygga namn på argument med ett namn.
En annan unik sak med **kwargs är att Python representerar värdet som en ordbok.
Hur man använder **kwargs
Precis som *args är dubbelasterisken den viktiga biten; du kan använda vilket ord som helst som parameternamn. Här är ett exempel på hur man använder **kwargs i Python:
defveckovis_närvaro(**vardagar):
total_deltagare = 0fördeltagareivardagar.värden():
total_attendees = total_attendees + attendeeslämna tillbaka totalt_deltagare
skriva ut(veckovis närvaro (måndag = 265, tisdag = 698, onsdag = 365, torsdag = 463, fredag = 234)) # returnerar 2025
skriva ut(veckovis närvaro (måndag = 265, fredag = 234)) # ger 499
skriva ut(veckovis närvaro (onsdag = 365, torsdag = 463, fredag = 234)) # returnerar 1062
Kodavsnittet ovan använder också en for-loop, men den här gången med Pythons inbyggda värden()-metod. Den metoden returnerar ett vyobjekt med alla värden i ordboken. Metoden values() låter dig gå igenom en Python-ordbok utan krångel.
Använd variabla argument för att göra dina Python-funktioner flexibla
Funktionsargument är praktiska, men vissa funktioner kan dra nytta av att acceptera ett varierande antal argument. Namngivna nyckelordsargument kan göra din kod mer läsbar och enklare att använda. Du bör omfamna Pythons *args och **kwargs argument. De är ganska enkla att använda, och med dem kan du göra dina funktioner och program mer flexibla.
Genom att följa stegen och kodavsnitten ovan hoppas vi att du nu kan använda variabla sökords- och icke-sökordsargument för dina funktioner.