Úvod
Python je jedným z najpopulárnejších programovacích jazykov na svete. V Pythone sú parametre súčasťou definícií funkcií. Umožňujú vám špecifikovať určité argumenty pre funkciu. Argument môže byť funkciou prijatý a aplikovaný.
Pri písaní kódu však nemôžete vedieť, aké presné prípady použitia môžu byť s vaším kódom implementované. Preto je v záujme budúcich programátorov a používateľov vášho programu vhodné odovzdávať funkcii premenlivý počet argumentov. Na tento účel musíte použiť špeciálne parametre. Sú to *args a **kwargs. V tomto návode sa naučíme všetko o parametroch *args a **kwargs v Pythone. Tiež sa naučíme, ako usporiadať argumenty a ako ich použiť pri volaniach funkcií.
Požiadavky
Aby ste mohli postupovať podľa krokov v tomto návode, musíte si pripraviť niekoľko vecí. Najprv musíte mať nainštalovaný Python 3 na vašom serveri so spusteným programovacím prostredím. Tiež musíte mať nainštalovaný program pre váš konkrétny operačný systém (Ubuntu, CentOS, Debian atď.).
Čo je *args a ako to funguje?
Začnime tým, že pochopíme, ako funguje *args . Verzia parametra s jednou hviezdičkou sa používa na odosielanie zoznamov argumentov s premenlivou dĺžkou bez kľúčových slov do funkcií. Majte na pamäti, že hviezdička je najdôležitejším prvkom tohto parametra.
Pre lepšie pochopenie si uveďme príklad. Nasleduje typická funkcia, ktorú môžete nájsť vo svojom kóde, využívajúca dva argumenty:
|
1 2 |
def multiply(x, y): print (x * y) |
Ako môžete vidieť, naše argumenty vo vyššie uvedenej funkcii sú x a y. Pri volaní funkcie použijete čísla zodpovedajúce x a y. Povedzme, že odovzdávame celé čísla 5 a 4 pre x a y v tomto poradí:
|
1 2 3 4 |
def multiply(x, y): print (x * y) multiply(5, 4) |
Teraz môžeme spustiť kód:
|
1 |
python lets_multiply.py |
Výstup, ktorý dostaneme, bude nasledujúci:
|
1 2 3 |
Výstup: 20 |
Výstup ukazuje, že celé čísla 5 a 4 boli vynásobené. To znamená, že funkcia multiply(x, y) fungovala.
Teraz povedzme, že by sme chceli nakoniec vynásobiť tri čísla namiesto dvoch. Bohužiaľ, pridanie ďalšieho čísla do vyššie uvedenej funkcie spôsobí takúto chybu:
|
1 2 3 4 |
def multiply(x, y): print (x * y) multiply(5, 4, 3) |
|
1 2 3 |
Výstup: TypeError: multiply() takes 2 positional arguments but 3 were given |
Preto, ak tušíte, že neskôr budete musieť pridať ďalšie argumenty, použite pre vaše pohodlie parameter *args. Môžete ho použiť takto:
|
1 2 3 4 5 6 7 8 9 10 |
def multiply(*args): z = 1 for num in args: z *= num print(z) multiply(4, 5) multiply(10, 9) multiply(2, 3, 4) multiply(3, 5, 10, 6) |
Jednoducho sme nahradili parametre funkcie x a y parametrom *args. Spustením tohto kódu získate súčin pre každé jedno volanie funkcie takto:
|
1 2 3 4 5 6 |
Výstup: 20 90 24 900 |
Teda, *args je ideálne použiť, keď chcete do svojej funkcie poslať zoznamy argumentov s premenlivou dĺžkou. Vďaka tejto schopnosti môžete pri volaní funkcií odovzdať toľko argumentov, koľko chcete. Tento parameter vám tak umožňuje vytvoriť flexibilnejší kód, ktorý dokáže do funkcie prijať veľké množstvo premenlivých argumentov bez kľúčových slov.
Čo je **kwargs a ako to funguje?
Ďalej tu máme verziu parametrov s dvoma hviezdičkami, ktorou je **kwargs. Na rozdiel od predchádzajúcej formy vám tento parameter umožňuje odovzdávať do funkcie slovníky argumentov s kľúčovými slovami a premenlivou dĺžkou. Podobne ako *args, dve hviezdičky sú najdôležitejším prvkom parametra.
Podobne ako v predchádzajúcej časti, môžete pridať toľko argumentov, koľko chcete. Rozdiel je v tom, že musíte priradiť kľúčové slová. Pre lepšie pochopenie si predstavte nasledujúci príklad. Tu začneme vypísaním **kwargs argumentov, ktoré chceme odovzdať funkcii:
|
1 2 |
def print_kwargs(**kwargs): print(kwargs) |
Teraz funkciu zavolajme. Ako môžete vidieť, pridali sme kľúčové argumenty:
|
1 2 3 4 |
def print_kwargs(**kwargs): print(kwargs) print_kwargs(kwargs_1="Shark", kwargs_2=4.5, kwargs_3=True) |
Spustenie programu v tomto bode vám ukáže tento výstup:
|
1 |
python print_kwargs.py |
|
1 2 3 |
Výstup: {'kwargs_3': True, 'kwargs_2': 4.5, 'kwargs_1': 'Shark'} |
Existuje však možnosť, že váš dátový typ slovníka je neusporiadaný. To do veľkej miery závisí od verzie Pythonu 3, ktorú používate. Napríklad akákoľvek verzia novšia ako Python 3.6 vám poskytne páry kľúč-hodnota v poradí. Akákoľvek staršia verzia zobrazí výstup v náhodnom poradí. Slovník, ktorý vytvoríte, sa bude volať kwargs. Upozorňujeme, že ho môžete používať a manipulovať s ním ako s akýmkoľvek iným slovníkom v systéme. Pozrime sa, ako môžete parameter **kwargs lepšie využiť a aplikovať.
V nasledujúcom príklade sa pokúsime vytvoriť novú funkciu, ktorá pozdraví slovník s menami. Náš ukážkový slovník bude mať dve mená:
|
1 2 3 4 5 |
def print_values(**kwargs): for key, value in kwargs.items(): print("Hodnota {} je {}".format(key, value)) print_values(my_name="Sammy", your_name="Casey") |
Spustenie programu vám poskytne tento výstup:
|
1 |
python print_values.py |
|
1 2 3 4 |
Výstup: Hodnota value of your_name je Casey Hodnota value of my_name je Sammy |
Podobne ako v predchádzajúcom príklade, slovníky sa môžu zdať neusporiadané. V dôsledku toho sa poradie mien Casey a Sammy môže v niektorých prípadoch obrátiť.
Ďalej odovzdáme funkcii ďalšie argumenty. To dokáže, že môžete prinútiť **kwargs prijať ľubovoľný počet argumentov, ktorý chcete:
|
1 2 3 4 5 6 7 8 9 10 11 |
def print_values(**kwargs): for key, value in kwargs.items(): print("Hodnota {} je {}".format(key, value)) print_values( name_1="Alex", name_2="Gray", name_3="Harper", name_4="Phoenix", name_5="Remy", name_6="Val") |
Spustenie programu vám ukáže tento výstup:
|
1 2 3 4 5 6 7 8 |
Výstup: Hodnota value of name_2 je Gray Hodnota value of name_6 je Val Hodnota value of name_4 je Phoenix Hodnota value of name_5 je Remy Hodnota value of name_3 je Harper Hodnota value of name_1 je Alex |
Tento výstup môže byť tiež neusporiadaný. Bez ohľadu na to tieto príklady ukazujú, že **kwargs poskytuje vášmu programu flexibilitu používať množstvo kľúčových argumentov.
Ako usporiadať argumenty
Pri usporiadaní argumentov vo funkcii alebo pri volaní funkcie je dôležité mať na pamäti stanovené poradie. Je nasledujúce:
-
Formálne pozičné argumenty
-
*args
-
Kľúčové argumenty
-
**kwargs
Povedzme, že používate *args a **kwargs s explicitnými pozičnými parametrami. To znamená, že vaša funkcia bude vyzerať takto:
|
1 2 |
def example(arg_1, arg_2, *args, **kwargs): ... |
Na druhej strane, použitie týchto parametrov s pomenovanými kľúčovými parametrami poskytne vašej funkcii nasledujúcu všeobecnú štruktúru:
|
1 2 |
def example2(arg_1, arg_2, *args, kw_1="shark", kw_2="blobfish", **kwargs): ... |
Nedodržanie stanoveného poradia spôsobí pri spustení kódu syntaktickú chybu. Preto je najlepšie vyhnúť sa tejto chybe hneď na začiatku.
Ako používať *args a **kwargs vo volaniach funkcií
Na záver vám ukážeme, ako použiť oba parametre na odovzdanie argumentov do funkcií. Začneme príkladom, ktorý ukazuje *args:
|
1 2 3 4 5 6 7 8 |
def some_args(arg_1, arg_2, arg_3): print("arg_1:", arg_1) print("arg_2:", arg_2) print("arg_3:", arg_3) args = ("Sammy", "Casey", "Alex") some_args(*args) |
V tejto funkcii sú tri parametre: arg_1, arg_2, a arg_3. Musíte vytvoriť premennú a nastaviť ju na iterovateľný objekt. V tomto prípade to bude tuple. Potom môžete premennú odovzdať do funkcie pomocou syntaxe s hviezdičkou.
Sledujte výstup, keď spustíte program pomocou python some_args.py príkaz:
|
1 2 3 4 5 |
Výstup: arg_1: Sammy arg_2: Casey arg_3: Alex |
Program je tiež možné zmeniť na iterovateľný zoznam dátového typu s iným názvom premennej. Nasledujúci kód kombinuje *args s pomenovaným parametrom:
|
1 2 3 4 5 6 7 8 |
def some_args(arg_1, arg_2, arg_3): print("arg_1:", arg_1) print("arg_2:", arg_2) print("arg_3:", arg_3) my_list = [2, 3] some_args(1, *my_list) |
Výstup po spustení programu bude nasledujúci:
|
1 2 3 4 5 |
Výstup: arg_1: 1 arg_2: 2 arg_3: 3 |
Na druhej strane môžete použiť kľúčové argumenty s **kwargs. Uistite sa, že vytvoríte premennú, ktorá sa rovná slovníku. Mal by mať 2 páry kľúč-hodnota. Tu je návod, ako odovzdáme premennú funkcii s 3 argumentmi:
|
1 2 3 4 5 6 7 8 |
def some_kwargs(kwarg_1, kwarg_2, kwarg_3): print("kwarg_1:", kwarg_1) print("kwarg_2:", kwarg_2) print("kwarg_3:", kwarg_3) kwargs = {"kwarg_1": "Val", "kwarg_2": "Harper", "kwarg_3": "Remy"} some_kwargs(**kwargs) |
Na spustenie programu znova použite python some_kwargs.py príkaz:
|
1 2 3 4 5 |
Výstup: kwarg_1: Val kwarg_2: Harper kwarg_3: Remy |
Záver
Na konci tohto návodu by ste mali dobre ovládať, čo sú *args a **kwargs a ako fungujú. Teraz môžete tieto parametre použiť vo svojom vlastnom kóde, aby bol váš program flexibilný pre budúcich používateľov. Sú ideálne pre situácie, keď neviete, koľko argumentov môže byť použitých. Len si dajte pozor na kritické prvky funkcií a parametrov.
Na záver uvádzame ďalšie zdroje z nášho blogu, ktoré vám pomôžu úspešne pracovať s Pythonom:
- Formát súboru txt: Práca s čistými textovými súbormi v Pythone 3
- Cykly v Pythone 3: Používanie príkazov Break, Continue a Pass
- Importovanie modulov v Pythone 3: Komplexný sprievodca
- Používanie formátovačov reťazcov v Pythone 3
- Programovanie v Pythone 3: Ako postupovať pri vytváraní tried a definovaní objektov?
Príjemné programovanie!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.