U svijetu programiranja u Pythonu dva se koncepta često pojavljuju u raspravama o učinkovitom i sažetom kodu: generatori i lambda funkcije. Kao dobavljač generatora, iz prve sam ruke vidio praktičnu primjenu generatora u raznim industrijama. Međutim, razumijevanje razlika između generatora i lambda funkcija ključno je za svakog programera koji želi napisati učinkovitiji Python kod. U ovom postu na blogu istražit ćemo ključne razlike između ova dva koncepta, njihove jedinstvene značajke i kada koristiti svaki od njih.
Što je generator u Pythonu?
Generator u Pythonu je posebna vrsta iteratora. Omogućuje vam ponavljanje niza vrijednosti bez potrebe da ih sve pohranjujete u memoriju odjednom. Ovo je osobito korisno kada se radi o velikim skupovima podataka ili beskonačnim nizovima. Generatori se definiraju pomoću funkcije generatora ili izraza generatora.
Generatorske funkcije
Generatorska funkcija je definirana kao normalna funkcija, ali umjesto korištenjapovratakključna riječ, koristiprinos. Kada se pozove funkcija generatora, ona vraća objekt generatora, koji se može ponoviti pomoću azapetlja ilisljedeći()funkcija.
Evo jednostavnog primjera funkcije generatora koja generira prvinparni brojevi:
def even_numbers(n): num = 0 while num < n: yield num num += 2 # Kreirajte objekt generatora gen = even_numbers(10) # Iterirajte preko generatora za num u gen: print(num)
U ovom primjeru,parni_brojevifunkcija je generatorska funkcija jer koristiprinosključna riječ. Kada se funkcija pozove, ona ne izvršava odmah kod unutar funkcije. Umjesto toga, vraća objekt generatora. Svaki put kada sesljedeći()funkcija se poziva na objekt generatora (bilo eksplicitno ili implicitno u azapetlja), funkcija nastavlja s izvođenjem od mjesta gdje je stala dok ne dođe do sljedećeprinosizjava.
Izrazi generatora
Izrazi generatora slični su razumijevanju popisa, ali umjesto upotrebe uglatih zagrada[], koriste zagrade(). Generatorski izrazi su koncizniji način stvaranja generatora.
Evo primjera generatorskog izraza koji generira kvadrate prvih 10 brojeva:
gen = (x**2 za x u rasponu(10)) # Iteracija preko generatora za num u genu: print(num)
Što je Lambda funkcija u Pythonu?
Lambda funkcija u Pythonu je mala, anonimna funkcija. Može uzeti bilo koji broj argumenata, ali može imati samo jedan izraz. Lambda funkcije se često koriste kada trebate jednostavnu funkciju na kratko vrijeme, kao što je nprkarta(),filter(), iliporedano()funkcije.
Evo primjera lambda funkcije koja zbraja dva broja:
add = lambda x, y: x + y # Poziv lambda funkcije result = add(3, 5) print(result)
U ovom primjeru lambda funkcija uzima dva argumentaxiii vraća njihov zbroj. Varijabli je dodijeljena lambda funkcijadodati, koja se tada može nazvati kao normalna funkcija.
Ključne razlike između generatora i lambda funkcija
Sintaksa i definicija
- Generatori: Generatori se definiraju pomoću funkcije generatora (s
prinosključna riječ) ili generatorski izraz (koristeći zagrade). Osmišljeni su za generiranje niza vrijednosti tijekom vremena. - Lambda funkcije: Lambda funkcije definirane su pomoću
lambdaključna riječ iza koje slijedi popis argumenata, dvotočka i izraz. Osmišljeni su kao jednostavna jednolinijska funkcija.
Namjena i slučajevi uporabe
- Generatori: Generatori se koriste kada trebate generirati veliki niz vrijednosti, ali ih ne želite sve pohraniti u memoriju odjednom. Obično se koriste u obradi podataka, strujanju podataka i ponavljanju velikih datoteka. Na primjer, ako radite s velikim skupom podataka i morate ga obraditi jednu po jednu stavku, generator može biti izvrsno rješenje.
- Lambda funkcije: Lambda funkcije se koriste kada trebate jednostavnu, jednokratnu funkciju. Obično se koriste u funkcijama višeg reda kao što su
karta(),filter(), iporedano(). Na primjer, ako želite sortirati popis rječnika na temelju određenog ključa, možete koristiti lambda funkciju kaoključargument uporedano()funkcija.
Upotreba memorije
- Generatori: Generatori su memorijski učinkoviti jer generiraju vrijednosti u hodu. Oni samo pohranjuju trenutno stanje generatora, a ne cijeli niz vrijednosti. To ih čini idealnima za rad s velikim skupovima podataka.
- Lambda funkcije: Lambda funkcije nemaju posebne značajke upravljanja memorijom. One su kao i svaka druga funkcija u smislu upotrebe memorije.
Povratne vrijednosti
- Generatori: Generatori vraćaju objekt generatora, koji je iterator. Možete iterirati preko objekta generatora da dobijete vrijednosti jednu po jednu.
- Lambda funkcije: Lambda funkcije vraćaju rezultat izraza koji sadrže. Pozivaju se kao normalne funkcije i vraćaju jednu vrijednost.
Praktične primjene
Generatori u stvarnim scenarijima
Kao dobavljač generatora, vidio sam kako se generatori mogu koristiti u raznim industrijama. Na primjer, u industriji proizvodnje električne energije, generatori se koriste za opskrbu električnom energijom u područjima gdje nema pristupa mreži. NašeGenerator tihog tipaje dizajniran da radi tiho, što ga čini idealnim za stambene prostore ili događaje gdje je buka problem. TheTihi generator s električnim pokretanjemnudi pogodnost električnog pokretanja, što ga čini lakim za korištenje čak i onima s ograničenim tehničkim znanjem. A za entuzijaste na otvorenom, našMali dizelski generator za kampiranjepruža pouzdan izvor energije za kampiranje.
U Pythonu se generatori mogu koristiti u sličnim scenarijima. Na primjer, ako radite na cjevovodu za obradu podataka, možete koristiti generator za čitanje velike datoteke red po red bez učitavanja cijele datoteke u memoriju. Ovo može značajno poboljšati performanse vašeg programa.
Lambda funkcije u scenarijima stvarnog svijeta
Lambda funkcije se često koriste u analizi i sortiranju podataka. Na primjer, ako imate popis rječnika koji predstavljaju zaposlenike i želite ih poredati po njihovoj plaći, možete koristiti lambda funkciju kaoključargument uporedano()funkcija:
zaposlenici = [ {'name': 'Alice', 'salary': 5000}, {'name': 'Bob', 'salary': 3000}, {'name': 'Charlie', 'salary': 7000} ] # Sortiraj zaposlenike po plaći sorted_employees = sorted(employees, key=lambda x: x['salary']) # Ispis sortiranih zaposlenici za zaposlenike u sorted_employees: print (zaposlenik)
Kada koristiti generatore i lambda funkcije
Kada koristiti generatore
- Kada trebate generirati veliki niz vrijednosti, ali ih ne želite sve pohraniti u memoriju odjednom.
- Kada trebate iterirati preko niza vrijednosti jednu po jednu, kao što je u cjevovodu za obradu podataka.
- Kada trebate stvoriti beskonačan niz vrijednosti.
Kada koristiti lambda funkcije
- Kada trebate jednostavnu, jednokratnu funkciju.
- Kada trebate proslijediti funkciju kao argument drugoj funkciji, kao što je in
karta(),filter(), iliporedano(). - Kada želite napisati koncizniji kod.
Zaključak
Zaključno, generatori i lambda funkcije dvije su snažne značajke u Pythonu koje služe različitim svrhama. Generatori su dizajnirani za generiranje niza vrijednosti tijekom vremena, dok su lambda funkcije dizajnirane kao jednostavne funkcije u jednom retku. Razumijevanje razlika između ova dva koncepta i kada koristiti svaki od njih može vam pomoći da napišete učinkovitiji i koncizniji Python kod.
Ako ste na tržištu za visokokvalitetnim generatorom, bilo da se radi o stambenoj, poslovnoj ili vanjskoj uporabi, imamo širok raspon opcija koje će zadovoljiti vaše potrebe. Kontaktirajte nas danas kako bismo razgovarali o vašim zahtjevima i pronašli savršen generator za vas.


Reference
- Python dokumentacija: https://docs.python.org/3/
- Pravi Python: https://realpython.com/

