Zpět na blog

Použití parametrů *args a **kwargs ve vašem kódu: tutoriál pro Python 3

Použití parametrů *args a **kwargs ve vašem kódu: tutoriál pro Python 3

Úvod

Python je jedním z nejpopulárnějších programovacích jazyků na světě. V Pythonu jsou parametry součástí definic funkcí. Umožňují vám specifikovat určité argumenty pro funkci. Argument může být funkcí přijat a aplikován.

Při psaní kódu však nemůžete vědět, jaké přesné případy použití mohou být s vaším kódem implementovány. Proto je v zájmu budoucích programátorů a uživatelů vašeho programu vhodné předávat funkci proměnný počet argumentů. K tomu musíte použít speciální parametry. Jedná se o *args a **kwargs. V tomto návodu se naučíme vše o parametrech *args a **kwargs v Pythonu. Naučíme se také, jak řadit argumenty a jak je aplikovat při volání funkcí.

Požadavky

Abyste mohli postupovat podle kroků v tomto návodu, musíte si připravit několik věcí. Nejprve musíte mít nainstalovaný Python 3 na vašem serveru se spuštěným programovacím prostředím. Musíte mít také nainstalovaný program pro váš konkrétní operační systém (Ubuntu, CentOS, Debian atd.).

Co je *args a jak to funguje?

Začněme tím, že pochopíme, jak funguje *args funguje. Verze parametru s jednou hvězdičkou se používá k odesílání seznamů argumentů s proměnnou délkou bez klíčových slov do funkcí. Mějte na paměti, že hvězdička je nejdůležitějším prvkem tohoto parametru.

Pro lepší pochopení si uveďme příklad. Následuje typická funkce se dvěma argumenty, kterou můžete najít ve svém kódu:

Jak vidíte, naše argumenty ve výše uvedené funkci jsou x a y. Při volání funkce použijete čísla odpovídající x a y. Řekněme, že předáváme celá čísla 5 a 4 pro x a y v tomto pořadí:

Nyní můžeme kód spustit:

Výstup, který obdržíme, bude následující:

Výstup ukazuje, že celá čísla 5 a 4 byla vynásobena. To znamená, že funkce multiply(x, y) fungovala.

Nyní řekněme, že bychom chtěli nakonec vynásobit tři čísla namísto pouhých dvou. Přidání dalšího čísla do výše uvedené funkce bohužel povede k následující chybě:

Proto pokud tušíte, že budete muset někdy později přidat další argumenty, použijte pro své pohodlí parametr *args. Můžete jej použít takto:

Jednoduše jsme nahradili parametry funkce x a y parametrem *args. Spuštěním tohoto kódu získáte součin pro každé jednotlivé volání funkce takto:

Tudíž *args je ideální použít, když chcete funkci poslat seznamy argumentů s proměnnou délkou. Díky této schopnosti můžete voláním funkcí předat tolik argumentů, kolik chcete. Tento parametr vám tak umožňuje vytvářet flexibilnější kód, který dokáže do funkce přijmout velké množství proměnných argumentů bez klíčových slov.

Co je **kwargs a jak to funguje?

Dále tu máme verzi parametrů se dvěma hvězdičkami, což je **kwargs. Na rozdíl od předchozí formy vám tento parametr umožňuje předávat do funkce slovníky argumentů s klíčovými slovy a proměnnou délkou. Podobně jako *args, dvě hvězdičky jsou nejdůležitějším prvkem parametru.

Stejně jako v předchozí části můžete přidat tolik argumentů, kolik chcete. Rozdíl je v tom, že musíte přiřadit klíčová slova. Pro lepší pochopení zvažte následující příklad. Zde začneme vypsáním **kwargs argumentů, které chceme předat funkci:

Nyní funkci zavolejme. Jak vidíte, přidali jsme klíčové argumenty:

Spuštění programu v tomto okamžiku vám ukáže tento výstup:

Existuje však možnost, že váš datový typ slovníku je neuspořádaný. To do značné míry závisí na verzi Pythonu 3, kterou používáte. Například jakákoli verze novější než Python 3.6 vám poskytne páry klíč-hodnota v pořadí. Jakákoli starší verze zobrazí výstup v náhodném pořadí. Slovník, který vytvoříte, se bude jmenovat kwargs. Všimněte si, že jej můžete používat a manipulovat s ním jako s jakýmkoli jiným slovníkem v systému. Podívejme se, jak můžete parametr **kwargs více využít a uplatnit.

V následujícím příkladu se pokusíme vytvořit novou funkci, která pozdraví slovník se jmény. Náš ukázkový slovník bude mít dvě jména:

Spuštění programu vám poskytne tento výstup:

Podobně jako v předchozím příkladu se může zdát, že slovníky jsou neuspořádané. Jako takové může být pořadí jmen Casey a Sammy v některých případech obrácené.

Dále předáme funkci další argumenty. To dokáže, že můžete nastavit **kwargs tak, aby přijímal libovolný počet argumentů, který chcete:

Spuštění programu vám ukáže tento výstup:

Tento výstup může být také neuspořádaný. Bez ohledu na to tyto příklady ukazují, že **kwargs dává vašemu programu flexibilitu používat libovolné množství klíčových argumentů.

Jak řadit argumenty

Při řazení argumentů ve funkci nebo volání funkce je důležité mít na paměti stanovené pořadí. Je následující:

  1. Formální poziční argumenty

  2. *args

  3. Klíčové argumenty

  4. **kwargs

Řekněme, že používáte *args a **kwargs s explicitními pozičními parametry. To znamená, že vaše funkce bude vypadat takto:

Na druhou stranu, použití těchto parametrů s pojmenovanými klíčovými parametry poskytne vaší funkci následující obecnou strukturu:

Nedodržení stanoveného pořadí povede při spuštění kódu k syntaktické chybě. Proto je nejlepší se této chybě hned na začátku vyhnout.

Jak používat *args a **kwargs ve voláních funkcí

Na závěr si ukážeme, jak oba parametry použít k předávání argumentů do funkcí. Začneme příkladem, který ukazuje *args:

V této funkci jsou tři parametry: arg_1, arg_2, a arg_3. Musíte vytvořit proměnnou a nastavit ji na iterovatelný objekt. V tomto případě to bude tuple. Poté můžete proměnnou předat do funkce pomocí syntaxe s hvězdičkou.

Sledujte výstup, když spustíte program pomocí python some_args.py příkazu:

Program je také možné změnit na iterovatelný seznam datový typ s jiným názvem proměnné. Následující kód kombinuje *args s pojmenovaným parametrem:

Výstup po spuštění programu bude následující:

Na druhou stranu můžete použít klíčové argumenty s **kwargs. Nezapomeňte vytvořit proměnnou, která se rovná slovníku. Měla by mít 2 páry klíč-hodnota. Zde je návod, jak předáme proměnnou funkci se 3 argumenty:

Použijte python some_kwargs.py příkaz ještě jednou pro spuštění programu:

Závěr

Na konci tohoto návodu byste měli dobře rozumět tomu, co jsou *args a **kwargs a jak fungují. Nyní můžete tyto parametry aplikovat ve svém vlastním kódu, aby byl váš program flexibilní pro budoucí uživatele. Tyto parametry jsou ideální pro situace, kdy nevíte, kolik argumentů může být použito. Jen se ujistěte, že si dáváte pozor na klíčové prvky funkcí a parametrů.

Na závěr uvádíme další zdroje z našeho blogu, které vám pomohou úspěšně pracovat s Pythonem:

Přejeme příjemné programování!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.