Vo svete programovania v Pythone sa v diskusiách o efektívnom a stručnom kóde často objavujú dva pojmy: generátory a funkcie lambda. Ako dodávateľ generátorov som z prvej ruky videl praktické aplikácie generátorov v rôznych priemyselných odvetviach. Pochopenie rozdielov medzi generátormi a funkciami lambda je však kľúčové pre každého programátora, ktorý chce napísať efektívnejší kód Python. V tomto blogovom príspevku preskúmame kľúčové rozdiely medzi týmito dvoma pojmami, ich jedinečné funkcie a kedy použiť každý z nich.
Čo je to generátor v Pythone?
Generátor v Pythone je špeciálny typ iterátora. Umožňuje vám iterovať postupnosť hodnôt bez toho, aby ste ich museli všetky naraz ukladať do pamäte. To je užitočné najmä pri práci s veľkými súbormi údajov alebo nekonečnými sekvenciami. Generátory sú definované pomocou funkcie generátora alebo výrazu generátora.
Funkcie generátora
Funkcia generátora je definovaná ako normálna funkcia, ale namiesto použitiavrátiťkľúčové slovo, používavýnos. Keď je zavolaná funkcia generátora, vráti objekt generátora, ktorý je možné opakovať pomocou apreslučka aleboďalšie ()funkciu.
Tu je jednoduchý príklad funkcie generátora, ktorá generuje prvúnpárne čísla:
def párne_čísla(n): num = 0, zatiaľ čo num < n: výnos num num += 2 # Vytvorte objekt generátora gen = párne_čísla(10) # Iterujte generátor pre num v gen: print(num)
V tomto príkladepárne_číslafunkcia je funkcia generátora, pretože používavýnoskľúčové slovo. Keď je funkcia zavolaná, nevykoná kód vo funkcii okamžite. Namiesto toho vráti objekt generátora. Zakaždým, keďďalšie ()funkcia sa volá na objekt generátora (buď explicitne alebo implicitne v apreslučka), funkcia pokračuje v vykonávaní od miesta, kde skončila, až kým nedosiahne ďalšiuvýnosvyhlásenie.
Generátor výrazov
Generátorové výrazy sú podobné ako zoznamy, ale nepoužívajú hranaté zátvorky[], používajú zátvorky(). Generátorové výrazy sú stručnejším spôsobom vytvárania generátorov.
Tu je príklad výrazu generátora, ktorý generuje druhé mocniny prvých 10 čísel:
gen = (x**2 pre x v rozsahu(10)) # Iterácia cez generátor pre num v gen: print(num)
Čo je funkcia Lambda v Pythone?
Funkcia lambda v Pythone je malá, anonymná funkcia. Môže mať ľubovoľný počet argumentov, ale môže mať iba jeden výraz. Funkcie lambda sa často používajú, keď potrebujete jednoduchú funkciu na krátky čas, ako napríklad vmapa(),filter(), alebozoradené ()funkcie.
Tu je príklad funkcie lambda, ktorá pridáva dve čísla:
add = lambda x, y: x + y # Volanie funkcie lambda result = add(3, 5) print(result)
V tomto príklade má funkcia lambda dva argumentyxaaa vráti ich sumu. Premennej je priradená funkcia lambdapridať, ktorú potom možno nazvať ako normálnu funkciu.
Kľúčové rozdiely medzi generátormi a funkciami lambda
Syntax a definícia
- Generátory: Generátory sú definované buď pomocou funkcie generátora (s
výnoskľúčové slovo) alebo generátorový výraz (pomocou zátvoriek). Sú navrhnuté tak, aby generovali postupnosť hodnôt v priebehu času. - Funkcie lambda: Funkcie lambda sú definované pomocou
lambdakľúčové slovo, za ktorým nasleduje zoznam argumentov, dvojbodka a výraz. Sú navrhnuté ako jednoduchá jednoriadková funkcia.
Účel a prípady použitia
- Generátory: Generátory sa používajú, keď potrebujete vygenerovať veľkú postupnosť hodnôt, ale nechcete ich všetky ukladať do pamäte naraz. Bežne sa používajú pri spracovaní údajov, streamovaní údajov a opakovaní veľkých súborov. Ak napríklad pracujete s veľkým súborom údajov a potrebujete ho spracovať po jednotlivých položkách, skvelým riešením môže byť generátor.
- Funkcie lambda: Funkcie Lambda sa používajú, keď potrebujete jednoduchú jednorazovú funkciu. Bežne sa používajú vo funkciách vyššieho rádu, ako napr
mapa(),filter(), azoradené (). Ak napríklad chcete zoradiť zoznam slovníkov podľa konkrétneho kľúča, môžete použiť funkciu lambda akokľúčargument vzoradené ()funkciu.
Využitie pamäte
- Generátory: Generátory sú pamäťovo efektívne, pretože generujú hodnoty za behu. Ukladajú iba aktuálny stav generátora, nie celú postupnosť hodnôt. Vďaka tomu sú ideálne na prácu s veľkými množinami údajov.
- Funkcie lambda: Funkcie Lambda nemajú žiadne špeciálne funkcie správy pamäte. Z hľadiska využitia pamäte sú ako každá iná funkcia.
Návratové hodnoty
- Generátory: Generátory vracajú objekt generátora, ktorým je iterátor. Môžete iterovať cez objekt generátora a získať hodnoty jednu po druhej.
- Funkcie lambda: Funkcie lambda vrátia výsledok výrazu, ktorý obsahujú. Nazývajú sa ako normálne funkcie a vracajú jedinú hodnotu.
Praktické aplikácie
Generátory v scenároch skutočného sveta
Ako dodávateľ generátorov som videl, ako sa dajú generátory použiť v rôznych odvetviach. Napríklad v odvetví výroby energie sa generátory používajú na poskytovanie elektriny v oblastiach, kde nie je prístup k rozvodnej sieti. nášGenerátor tichého typuje navrhnutý tak, aby fungoval potichu, vďaka čomu je ideálny pre obytné oblasti alebo podujatia, kde je problémom hluk. TheTichý generátor elektrického štartuponúka pohodlie elektrického štartovania, vďaka čomu ho môžu ľahko používať aj tí, ktorí majú obmedzené technické znalosti. A pre outdoorových nadšencov nášMalý dieselový generátor na kempovanieposkytuje spoľahlivý zdroj energie pri kempovaní.
V Pythone môžu byť generátory použité v podobných scenároch. Napríklad, ak pracujete na potrubí spracovania údajov, môžete použiť generátor na čítanie veľkého súboru riadok po riadku bez načítania celého súboru do pamäte. To môže výrazne zlepšiť výkon vášho programu.
Funkcie lambda v scenároch reálneho sveta
Funkcie lambda sa často používajú pri analýze a triedení údajov. Ak máte napríklad zoznam slovníkov reprezentujúcich zamestnancov a chcete ich zoradiť podľa platu, môžete použiť funkciu lambda akokľúčargument vzoradené ()funkcia:
zamestnanci = [ {'name': 'Alice', 'plat': 5000}, {'name': 'Bob', 'plat': 3000}, {'name': 'Charlie', 'plat': 7000} ] # Zoradiť zamestnancov podľa platu sorted_employees: xemployees:xemployees: x['plat']) # Vytlačte zoradených zamestnancov pre zamestnanca v sort_employees: tlačiť (zamestnanec)
Kedy použiť generátory a funkcie lambda
Kedy použiť generátory
- Keď potrebujete vygenerovať veľkú postupnosť hodnôt, ale nechcete ich všetky ukladať do pamäte naraz.
- Keď potrebujete opakovať postupnosť hodnôt jednu po druhej, ako napríklad v potrubí spracovania údajov.
- Keď potrebujete vytvoriť nekonečnú postupnosť hodnôt.
Kedy použiť funkcie Lambda
- Keď potrebujete jednoduchú, jednorazovú funkciu.
- Keď potrebujete odovzdať funkciu ako argument inej funkcii, napríklad in
mapa(),filter(), alebozoradené (). - Keď chcete napísať výstižnejší kód.
Záver
Na záver, generátory a funkcie lambda sú dve výkonné funkcie v Pythone, ktoré slúžia na rôzne účely. Generátory sú navrhnuté tak, aby generovali postupnosť hodnôt v priebehu času, zatiaľ čo funkcie lambda sú navrhnuté ako jednoduchá jednoriadková funkcia. Pochopenie rozdielov medzi týmito dvoma pojmami a ich použitie vám môže pomôcť napísať efektívnejší a stručnejší kód Pythonu.
Ak hľadáte vysokokvalitný generátor, či už ide o obytné, komerčné alebo vonkajšie použitie, máme širokú škálu možností, ktoré uspokoja vaše potreby. Kontaktujte nás ešte dnes, aby sme prediskutovali vaše požiadavky a našli pre vás dokonalý generátor.


Referencie
- Dokumentácia k Pythonu: https://docs.python.org/3/
- Skutočný Python: https://realpython.com/

