U ovom ćemo članku s primjerima naučiti o Python * args i ** kwargs, njihovoj upotrebi i funkcijama.
U programiranju definiramo funkciju za izradu koda za ponovnu upotrebu koji izvodi slične operacije. Da bismo izveli tu operaciju, pozivamo funkciju s određenom vrijednošću, koja se u Pythonu naziva argumentom funkcije.
Preporučili bismo vam da pročitate argumente funkcije Python i Python funkcije.
Pretpostavimo da definiramo funkciju za zbrajanje 3 broja.
Primjer 1: Funkcija dodavanja 3 broja
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
Kada pokrenemo gornji program, izlaz će biti
zbroj: 35
U gornjem programu imamo adder()
funkciju s tri argumenta x, y i z. Kad proslijedimo tri vrijednosti dok pozivamo adder()
funkciju, kao izlaz dobivamo zbroj 3 broja.
Pogledajmo što se događa kada u adder()
funkciji proslijedimo više od 3 argumenta .
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
Kada pokrenemo gornji program, izlaz će biti
TypeError: adder () uzima 3 pozicijska argumenta, ali je dato 5
U gornjem programu smo adder()
funkciji proslijedili 5 argumenata umjesto 3 argumenta zbog kojih smo dobili TypeError
.
Uvod u * args i ** kwargs u Pythonu
U Pythonu funkciju pomoću posebnih simbola možemo proslijediti promjenjivi broj argumenata. Dva su posebna simbola:
- * argumenti (ne argumenti ključnih riječi)
- ** kwargs (argumenti ključnih riječi)
* Args i ** kwargs koristimo kao argument kada nismo sigurni u broj argumenata koji će se proslijediti u funkcijama.
Python * argumenti
Kao u gornjem primjeru, nismo sigurni u broj argumenata koji se mogu proslijediti funkciji. Python ima * args koji nam omogućuju prosljeđivanje varijabilnog broja argumenata koji nisu ključne riječi kako bi funkcionirali.
U funkciji bismo trebali koristiti zvjezdicu *
prije imena parametra za prosljeđivanje argumenata promjenjive duljine. Argumenti se prosljeđuju kao skup i ti prosljeđeni argumenti čine koru unutar funkcije s istim imenom kao parametar isključujući zvjezdicu *
.
Primjer 2: Korištenje * args za prosljeđivanje argumenata promjenjive duljine funkciji
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)
Kada pokrenemo gornji program, izlaz će biti
Zbir: 8 Zbir: 22 Zbir: 17
U gore navedenom programu koristili smo * num kao parametar koji nam omogućuje da adder()
funkciji proslijedimo popis argumenata promjenjive duljine . Unutar funkcije imamo petlju koja dodaje proslijeđeni argument i ispisuje rezultat. Kao argument funkciji proslijedili smo 3 različita korpusa s promjenjivom duljinom.
Python ** kwargs
Python prenosi argument ne-ključne riječi promjenjive duljine u funkciju pomoću * args, ali ne možemo to koristiti za prosljeđivanje argumenta ključne riječi. Za ovaj problem Python je dobio rješenje nazvano ** kwargs, koje nam omogućuje da funkciji proslijedimo varijabilnu duljinu argumenata ključne riječi.
U funkciji koristimo dvostruku zvjezdicu **
ispred naziva parametra za označavanje ove vrste argumenata. Argumenti se prosljeđuju kao rječnik i ti argumenti čine rječnik unutar funkcije s imenom istim kao parametar isključujući dvostruku zvjezdicu **
.
Primjer 3: Korištenje ** kwargs za prosljeđivanje argumenata ključne riječi varijable funkciji
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)
Kada pokrenemo gornji program, izlaz će biti
Tip podataka argument: Ime je Sita Prezime je Sharma Dob je 22 Telefon je 1234567890 Tip podataka argument: Ime je John Prezime je Wood Adresa e-pošte je [email protected] Zemlja je Wakanda Dob je 25 Telefon je 9876543210
U gore navedenom programu imamo funkciju intro()
s ** podacima kao parametrom. Funkciji smo proslijedili dva rječnika s promjenjivom duljinom argumenta intro()
. Imamo intro()
funkciju for loop inside koja radi na podacima proslijeđenog rječnika i ispisuje vrijednost rječnika.
Stvari koje treba zapamtiti:
- * args i * kwargs su posebna ključna riječ koja omogućuje funkciji da uzima argument promjenjive duljine.
- * args prenosi promjenjivi broj argumenata bez ključnih riječi i na kojima se može izvršiti operacija popisa.
- ** kwargs prosljeđuje varijabilni broj rječnika argumenata ključnih riječi kako bi funkcionirao na kojem se može izvršiti rad rječnika.
- * args i ** kwargs čine funkciju fleksibilnom.