V tomto článku se na příkladech seznámíme s Python * args a ** kwargs, jejich použitím a funkcemi.
V programování definujeme funkci pro vytvoření opakovaně použitelného kódu, který provádí podobnou operaci. K provedení této operace voláme funkci se specifickou hodnotou, tato hodnota se v Pythonu nazývá argument funkce.
Doporučujeme vám přečíst si funkce Python a argumenty funkce Pythonu.
Předpokládejme, že definujeme funkci pro přidání 3 čísel.
Příklad 1: Funkce pro přidání 3 čísel
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
Když spustíme výše uvedený program, výstup bude
součet: 35
Ve výše uvedeném programu máme adder()
funkci se třemi argumenty x, yaz. Když při volání adder()
funkce předáme tři hodnoty , dostaneme jako výstup součet 3 čísel.
Podívejme se, co se stane, když ve adder()
funkci předáme více než 3 argumenty .
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
Když spustíme výše uvedený program, výstup bude
TypeError: adder () trvá 3 poziční argumenty, ale 5 bylo dáno
Ve výše uvedeném programu jsme funkci předali 5 argumentů adder()
místo 3 argumentů, kvůli kterým jsme se dostali TypeError
.
Úvod do * args a ** kwargs v Pythonu
V Pythonu můžeme funkci předat proměnný počet argumentů pomocí speciálních symbolů. Existují dva speciální symboly:
- * args (argumenty bez klíčových slov)
- ** kwargs (argumenty klíčových slov)
Používáme * args a ** kwargs jako argument, když si nejsme jisti počtem argumentů, které mají být předány funkcím.
Python * args
Stejně jako ve výše uvedeném příkladu si nejsme jisti počtem argumentů, které lze předat funkci. Python má * args, které nám umožňují předat proměnný počet argumentů bez klíčových slov do funkce.
Ve funkci bychom měli *
před název parametru použít hvězdičku k předání argumentů proměnné délky. Argumenty se předávají jako n-tice a tyto předané argumenty vytvářejí n-tici uvnitř funkce se stejným názvem jako parametr bez hvězdičky *
.
Příklad 2: Použití * args k předání argumentů proměnné délky do funkce
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)
Když spustíme výše uvedený program, výstup bude
Součet: 8 Součet: 22 Součet: 17
Ve výše uvedeném programu jsme použili * num jako parametr, který nám umožňuje předat adder()
funkci seznam argumentů s proměnnou délkou . Uvnitř funkce máme smyčku, která přidá předaný argument a vytiskne výsledek. Funkci jsme předali 3 různé n-tice s proměnnou délkou jako argument.
Python ** kwargs
Python předává argument s proměnnou délkou bez klíčového slova do funkce pomocí * args, ale nemůžeme to použít k předání argumentu klíčového slova. Pro tento problém má Python řešení zvané ** kwargs, což nám umožňuje předat proměnné délce argumentů klíčových slov funkci.
Ve funkci používáme dvojitou hvězdičku **
před názvem parametru k označení tohoto typu argumentu. Argumenty jsou předávány jako slovník a tyto argumenty vytvářejí slovník uvnitř funkce se stejným názvem jako parametr bez dvojité hvězdičky **
.
Příklad 3: Použití ** kwargs k předání argumentů klíčových slov proměnné do funkce
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)
Když spustíme výše uvedený program, výstup bude
Datový typ argumentu: Jméno je Sita Příjmení je Sharma Věk je 22 Telefon je 1234567890 Typ dat argumentu: Jméno je John Příjmení je Wood E-mail je [email protected] Země je Wakanda Věk je 25 Telefon je 9876543210
Ve výše uvedeném programu máme funkci intro()
s ** daty jako parametrem. intro()
Funkci jsme předali dva slovníky s proměnnou délkou argumentu . Máme pro intro()
funkci loop inside, která pracuje na datech předaného slovníku a tiskne hodnotu slovníku.
Věci k zapamatování:
- * args a * kwargs jsou speciální klíčová slova, která umožňují funkci přijmout argument s proměnnou délkou.
- * args předává variabilní počet seznamů argumentů bez klíčových slov a na které operaci seznamu lze provést.
- ** kwargs předává proměnný počet slovníků argumentů klíčových slov do funkce, na které lze provádět operaci slovníku.
- * args a ** kwargs zajišťují flexibilitu funkce.