V tomto článku sa dozvieme o Python * args a ** kwargs, ich použitiach a funkciách s príkladmi.
V programovaní definujeme funkciu na vytvorenie opakovane použiteľného kódu, ktorý vykonáva podobnú operáciu. Na vykonanie tejto operácie nazývame funkciu so špecifickou hodnotou, táto hodnota sa v Pythone nazýva argument funkcie.
Odporúčame vám prečítať si Python Function a Python Function Arguments.
Predpokladajme, že definujeme funkciu na sčítanie 3 čísel.
Príklad 1: Funkcia na pridanie 3 čísel
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
Keď spustíme vyššie uvedený program, výstup bude
súčet: 35
Vo vyššie uvedenom programe máme adder()
funkciu s tromi argumentmi x, yaz. Keď pri volaní adder()
funkcie odovzdáme tri hodnoty , dostaneme ako výstup súčet 3 čísel.
Pozrime sa, čo sa stane, keď vo adder()
funkcii zadáme viac ako 3 argumenty .
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
Keď spustíme vyššie uvedený program, výstup bude
TypeError: adder () má 3 pozičné argumenty, ale bolo ich zadaných 5
Vo vyššie uvedenom programe sme adder()
funkcii odovzdali 5 argumentov namiesto 3 argumentov, kvôli ktorým sme sa dostali TypeError
.
Úvod do * args a ** kwargs v Pythone
V Pythone môžeme funkcii odovzdať premenný počet argumentov pomocou špeciálnych symbolov. Existujú dva špeciálne symboly:
- * args (argumenty bez kľúčových slov)
- ** kwargs (argumenty pre kľúčové slová)
Používame * args a ** kwargs ako argument, keď si nie sme istí počtom argumentov, ktoré treba odovzdať vo funkciách.
Python * args
Rovnako ako v predchádzajúcom príklade si nie sme istí počtom argumentov, ktoré je možné odovzdať funkcii. Python má * args, ktoré nám umožňujú prenášať variabilný počet argumentov bez kľúčových slov do funkcie.
Vo funkcii by sme mali používať hviezdičku *
pred názvom parametra na odovzdanie argumentov s premennou dĺžkou. Argumenty sa odovzdávajú ako n-tica a tieto odovzdané argumenty vytvárajú n-ticu vo vnútri funkcie s rovnakým názvom ako parameter okrem hviezdičky *
.
Príklad 2: Použitie * args na prenos argumentov s premennou dĺžkou do funkcie
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)
Keď spustíme vyššie uvedený program, výstup bude
Súčet: 8 Súčet: 22 Súčet: 17
Vo vyššie uvedenom programe sme použili * num ako parameter, ktorý nám umožňuje odovzdať adder()
funkcii zoznam argumentov s premennou dĺžkou . Vo vnútri funkcie máme slučku, ktorá pridá zadaný argument a vytlačí výsledok. Funkcii sme odovzdali 3 rôzne n-tice s premenlivou dĺžkou ako argument.
Python ** kwargs
Python odovzdáva argumenty iných ako kľúčových slov s premennou dĺžkou do funkcie pomocou * args, ale toto nemôžeme použiť na odovzdanie argumentu kľúčových slov. Pre tento problém má Python riešenie s názvom ** kwargs, ktoré nám umožňuje odovzdať premennej dĺžke argumentov kľúčových slov funkcii.
Vo funkcii používame **
na označenie tohto typu argumentu dvojitú hviezdičku pred názvom parametra. Argumenty sa odovzdávajú ako slovník a tieto argumenty vytvárajú vo vnútri slovníka funkciu s rovnakým menom ako parameter bez dvojitej hviezdičky **
.
Príklad 3: Použitie ** kwargs na prenos argumentov kľúčových slov premennej do funkcie
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)
Keď spustíme vyššie uvedený program, výstup bude
Typ argumentu: Meno je Sita Priezvisko je Sharma Vek je 22 Telefón je 1234567890 Typ údajov: Meno je John Priezvisko je Wood E-mail je [email protected] Krajina je Wakanda Vek je 25 Telefón je 9876543210
Vo vyššie uvedenom programe máme funkciu intro()
s ** údajmi ako parametrom. Funkcii sme odovzdali dva slovníky s rôznou dĺžkou argumentov intro()
. Máme intro()
funkciu loop inside, ktorá pracuje s údajmi odovzdaného slovníka a vytlačí hodnotu slovníka.
Na čo treba pamätať:
- * args a * kwargs sú špeciálne kľúčové slová, ktoré umožňujú funkcii prijať argument s premennou dĺžkou.
- * args odovzdáva premenlivý počet zoznamov argumentov bez kľúčových slov a na tom, ktoré operácie v zozname je možné vykonať.
- ** kwargs odovzdáva premenný počet slovníkov argumentov kľúčových slov do funkcie, na ktorej je možné vykonávať činnosť slovníka.
- * args a ** kwargs robia funkciu flexibilnou.