I den här artikeln lär vi oss om Python * args och ** kwargs, deras användningsområden och funktioner med exempel.
Vid programmering definierar vi en funktion för att skapa en återanvändbar kod som utför liknande operationer. För att utföra den operationen kallar vi en funktion med det specifika värdet, detta värde kallas ett funktionsargument i Python.
Vi rekommenderar att du läser Python-funktion och Python-funktionsargument.
Antag att vi definierar en funktion för att lägga till 3 nummer.
Exempel 1: Funktion för att lägga till 3 nummer
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
När vi kör ovanstående program blir resultatet
summa: 35
I ovanstående program har vi adder()
funktion med tre argument x, y och z. När vi skickar tre värden medan adder()
vi anropar funktionen får vi summan av de 3 siffrorna som utdata.
Låt oss se vad som händer när vi skickar fler än 3 argument i adder()
funktionen.
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
När vi kör ovanstående program blir resultatet
TypeError: adder () tar 3 positionella argument men 5 gavs
I ovanstående program skickade vi fem argument till adder()
funktionen istället för 3 argument på grund av vilka vi fick TypeError
.
Introduktion till * args och ** kwargs i Python
I Python kan vi skicka ett variabelt antal argument till en funktion med hjälp av specialsymboler. Det finns två speciella symboler:
- * args (icke-sökordsargument)
- ** kwargs (sökordsargument)
Vi använder * args och ** kwargs som argument när vi är osäkra på antalet argument som ska skickas i funktionerna.
Python * argumenterar
Som i exemplet ovan är vi inte säkra på antalet argument som kan skickas till en funktion. Python har * args som låter oss skicka det variabla antalet icke-nyckelordargument för att fungera.
I funktionen bör vi använda en asterisk *
före parameternamnet för att skicka argument med variabel längd. Argumenten skickas som en tupel och dessa skickade argument gör tuple inuti funktionen med samma namn som parametern exklusive asterisk *
.
Exempel 2: Använd * args för att skicka argumenten med variabel längd till funktionen
def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)
När vi kör ovanstående program blir resultatet
Summa: 8 Summa: 22 Summa: 17
I ovanstående program använde vi * num som en parameter som låter oss skicka argumentlistan med variabel längd till adder()
funktionen. Inuti funktionen har vi en slinga som lägger till det godkända argumentet och skriver ut resultatet. Vi passerade 3 olika tuplar med variabel längd som ett argument för funktionen.
Python ** kwargs
Python skickar argument med variabel längd utan sökord för att fungera med * args men vi kan inte använda detta för att skicka nyckelordargument. För detta problem har Python en lösning som heter ** kwargs, det låter oss skicka den variabla längden på nyckelordsargument till funktionen.
I funktionen använder vi den dubbla asterisken **
före parameternamnet för att beteckna denna typ av argument. Argumenten skickas som en ordlista och dessa argument gör att en ordlista inuti-funktionen med samma namn som parametern exkluderar dubbel asterisk **
.
Exempel 3: Använd ** kwargs för att skicka argumenten för variabla nyckelord till funktionen
def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)
När vi kör ovanstående program blir resultatet
Datatyp av argument: Förnamn är Sita Efternamn är Sharma Ålder är 22 Telefon är 1234567890 Datatyp av argument: Förnamn är John Efternamn är Wood E-post är [email protected] Land är Wakanda Ålder är 25 Telefon är 9876543210
I ovanstående program har vi en funktion intro()
med ** data som parameter. Vi skickade två ordböcker med variabel argumentlängd till intro()
funktionen. Vi har för loop-in- intro()
funktion som fungerar på data för godkänd ordbok och skriver ut värdet på ordlistan.
Saker att komma ihåg:
- * args och * kwargs är speciella nyckelord som gör att funktionen kan ta argument med variabel längd.
- * args passerar variabelt antal icke-nyckelord argumentlista och på vilken manövrering av listan kan utföras.
- ** kwargs skickar variabelt antal ordlistor för nyckelordargument för att fungera med vilken manövrering av en ordbok kan utföras.
- * args och ** kwargs gör funktionen flexibel.