Python * args a ** kwargs (s príkladmi)

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:

  1. * args (argumenty bez kľúčových slov)
  2. ** 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.

Zaujímavé články...