Postoje tri vrste argumenata koje Python funkcija može prihvatiti: standardni, varijabilni (*args) i ključna riječ (**kwargs). Standardni argumenti su najjednostavniji, ali imaju ograničenu funkcionalnost. S druge strane, *args i **kwargs vam omogućuju da svoje funkcije učinite fleksibilnijima prihvaćanjem promjenjivog broja ulaza.
Vrsta prosljeđivanja argumenata koju odaberete ovisi o prirodi vaše funkcije i vlastitom preferiranom stilu programiranja.
Osnovne funkcije u Pythonu
Da bismo razumjeli kako funkcioniraju dva varijabilna argumenta u Python funkcijama, bitno je razumjeti zašto uopće postoje. Jednostavna funkcija deklarira fiksni broj anonimnih argumenata na sljedeći način:
defdodatak(a, b, c):
povratak a + b + c
Ova funkcija radi dobro, ali ima prostora za poboljšanje. Najveći problem je što obrađuje samo dva argumenta, tako da može zbrajati samo dva broja. Što ako želite zbrojiti dva ili četiri broja? Ova funkcija vam to neće dopustiti. Prosljeđivanje više ili manje argumenata nego što funkcija prihvaća dovest će do TypeError.
Naravno, možete stvoriti više funkcija za prihvaćanje različitog broja argumenata. Ali to je nezgodno i uopće se neće dobro skalirati. Također ćete morati stvoriti novu funkciju svaki put kada želite rukovati novim brojem ulaza.
Tu dolaze promjenjivi argumenti i argumenti ključnih riječi. Koristeći *args i **kwargs, možete definirati fleksibilne funkcije koje mogu uzeti promjenjiv broj ulaza.
Što je *args u Pythonu?
Glavna ideja iza *args u Pythonu je omogućiti vam da u svoju funkciju proslijedite promjenjiv broj ulaza. Ovo je korisno u raznim aplikacijama. Na primjer, zamislite program kalkulatora u kojem želite dati korisniku mogućnost da zbroji dva ili više brojeva i vrati zbroj.
Imajte na umu da je args samo ime varijable; važno je *. Možete koristiti bilo koji valjani naziv za svoj argument varijable, sve dok uključite *.
Kako koristiti *args
Funkciju addnum možete modificirati tako da uzima promjenjivi broj ulaza na sljedeći način:
defdodatak(*args):
ukupno = 0za br u argumenti:
ukupno = ukupno + br
povratak ukupno
Isječak koda iznad koristi for petlju za ponavljanje kroz dostavljene ulaze.
Zatim možete pozvati funkciju addnum s promjenjivim argumentima i ona će raditi bez greške:
ispisati(dodatak(10, 1, 12, 12, 4, 54, 5)) ## vraća 98
ispisati(dodatak(14, 54, 5)) # vraća 73
ispisati(dodatak(10, 5)) # vraća 15
Što je **kwargs u Pythonu?
Dok nam i *args i **kwargs omogućuju prosljeđivanje promjenjivog broja ulaza funkcijama, potonji je specifičan za argumente ključne riječi. U slučaju da ne znate, argumenti ključnih riječi su samo otmjeni nazivi za argumente s imenom.
Još jedna jedinstvena stvar kod **kwargs-a je da Python predstavlja vrijednost kao rječnik.
Kako koristiti **kwargs
Kao i *args, dvostruka zvjezdica je važan bit; možete koristiti bilo koju riječ kao naziv parametra. Evo primjera kako koristiti **kwargs u Pythonu:
deftjedno_prisustvo(**radnim danima):
ukupno_polaznika = 0zapolaznikauradnim danima.vrijednosti():
ukupno_polaznika = ukupno_polaznika + sudionikapovratak ukupno_polaznika
ispisati(tjedno_prisustvo (ponedjeljak = 265, utorak = 698, srijeda = 365, četvrtak = 463, petak = 234)) # vraća 2025
ispisati(tjedno_prisustvo (ponedjeljak = 265, petak = 234)) # vraća 499
ispisati(tjedno_prisustvo (srijeda = 365, četvrtak = 463, petak = 234)) # vraća 1062
Gornji isječak koda također koristi for petlju, ali ovaj put s Pythonovom ugrađenom metodom values(). Ta metoda vraća objekt pogleda svih vrijednosti u rječniku. Metoda values() vam omogućuje proći kroz Python rječnik bez muke.
Koristite promjenjive argumente kako biste svoje Python funkcije učinili fleksibilnim
Argumenti funkcije su zgodni, ali neke funkcije mogu imati koristi od prihvaćanja promjenjivog broja argumenata. Imenovani argumenti ključne riječi mogu učiniti vaš kod čitljivijim i lakšim za korištenje. Trebali biste prihvatiti Pythonove argumente *args i **kwargs. Prilično su jednostavni za korištenje, a pomoću njih možete učiniti svoje funkcije i programe fleksibilnijim.
Slijedeći gore navedene korake i isječke koda, nadamo se da sada možete koristiti varijabilne argumente ključne riječi i argumente koji nisu ključni za svoje funkcije.