Čo sú generátory v Pythone a ako ich používať?



Zistite, čo sú generátory v Pythone, spolu s výhodami. Naučte sa tiež, ako ich vytvárať a používať spolu s rôznymi prípadmi použitia.

Generovanie iterabilných objektov alebo objektov, ktoré umožňujú ich prekročenie, sa považuje za zaťažujúcu úlohu. Ale v , implementácia tejto bolestivej úlohy je skutočne bezproblémová. Poďme teda ďalej a pozrime sa bližšie na Generátory v Pythone.

Tu je zoznam všetkých tém, ktorým sa venuje tento článok:





Tak poďme na to. :)

Čo sú generátory v Pythone?

Generátory sú v zásade funkcie, ktoré vracajú prechádzateľné objekty alebo položky. Tieto funkcie neprodukujú všetky položky naraz, ale vyrábajú ich naraz a iba v prípade potreby. Kedykoľvek je zahrnutý na iteráciu nad množinou položiek, je spustená funkcia generátora. Generátory majú tiež množstvo výhod.



ako vytvoriť java balík

Výhody použitia generátorov

  • Bez generátorov v Pythone je výroba iterabilných záznamov mimoriadne náročná a zdĺhavá.

  • Generátory, ktoré sa dajú ľahko implementovať, pretože automaticky implementujú __iter __ (), __next __ () a StopIteration, ktoré je inak potrebné výslovne špecifikovať.



  • Pamäť sa ukladá pri vytváraní položiek, ako je potrebné, na rozdiel od bežných . Táto skutočnosť sa stáva veľmi dôležitou, keď potrebujete vytvoriť obrovské množstvo iterátorov. Toto sa tiež považuje za najväčšiu výhodu generátorov.

  • Môže byť použitý na výrobu nekonečného množstva predmetov.

  • Môžu sa tiež použiť na uskutočnenie viacerých operácií

Normálne funkcie vs funkcie generátora:

Generátory v Pythone sa vytvárajú rovnako, ako vy pomocou kľúčového slova „def“. Funkcie generátora však namiesto návratového kľúča používajú kľúčové slovo výnos. Toto slúži na informovanie tlmočníka, že ide o iterátor. Nielen to, funkcie generátora sa spúšťajú, keď sa volá funkcia next (), a nie podľa ich názvu, ako v prípade bežných funkcií. Zvážte nasledujúci príklad, aby ste tomu lepšie porozumeli:

PRÍKLAD:

def func (a): yield a a = [1,2,3] b = func (a) next (b)

VÝKON: [1, 2, 3]

Ako vidíte, vo vyššie uvedenom výstupe funkcia func () využíva na vykonanie kľúčové slovo výnos a ďalšiu funkciu. Pre normálnu funkciu však budete potrebovať nasledujúci kód:

PRÍKLAD:

def func (a): return a a = [1,2,3] func (a)

VÝKON: [1, 2, 3]

Ak sa pozriete na vyššie uvedený príklad, možno by vás zaujímalo, prečo používať funkciu Generátor, keď normálna funkcia tiež vracia rovnaký výstup. Poďme teda ďalej a pozrime sa, ako používať generátory v Pythone.

Používanie funkcií generátora:

Ako už bolo spomenuté, generátory v Pythone vytvárajú po jednom iterovateľné súbory. Zoznámte sa s nasledujúcim príkladom:

PRÍKLAD:

def myfunc (a): while a> = 3: výnos a a = a + 1 b = myfunc (a) print (b) next (b)

Po vykonaní nasledujúcej funkcie sa zobrazí nasledujúci výstup:

VÝKON: 4

Tu bol vrátený jeden iterovateľný objekt vyhovujúci podmienke while. Po vykonaní sa kontrola prenesie na volajúceho. V prípade, že je potrebných viac položiek, je potrebné rovnakú funkciu vykonať znova zavolaním funkcie next ().

nasledujúci (b)

VÝKON: 5

Pri ďalších spusteniach funkcia vráti 6,7 atď. Funkcie generátora v Pythone implementujú metódy __iter __ () a __next __ () automaticky. Preto môžete objekty iterovať pomocou metódy next (). Keď sa má generovanie položky ukončiť, funkcie generátora implementujú StopIterácia interne bez obáv z volajúceho. Tu je ďalší príklad:

PRÍKLAD:

a = 2 def myfunc (a): while a> = 0: výťažok a - = 1 b = myfunc (a) print (b) next (b)

VÝKON:

Generátory StopIteration v Python-EdurekaVyššie uvedený obrázok zobrazuje počet vykonaní požadovaného programu. Ak sa pokúsite zavolať ďalšiu funkciu znova, vráti správu s uvedením StopIterácia bol implementovaný. Ak sa pokúsite urobiť s normálnymi funkciami, vrátené hodnoty sa nezmenia ani neopakujú. Pozrite sa na príklad nižšie:

PRÍKLAD:

def z (): n = 1 výnos n n = n + 3 výnos n p = z () next (p)

VÝKON:

Generátory so slučkami:

Ak chcete vykonať rovnakú funkciu naraz, môžete využiť slučku „pre“. Táto slučka pomáha iterovať nad objektmi a po všetkých implementáciách vykoná StopIteration.

PRÍKLAD:

def z (): n = 1 výťažok n n = n + 3 výťažok n pre x v z (): tlač (x)

VÝKON:

jeden
4

Môžete tiež určiť výrazy na generovanie opakovateľných objektov.

Výrazy generátora:

Na výrobu iterátorov môžete tiež použiť výrazy spolu so slučkou for. Toto zvyčajne uľahčuje generovanie iterátorov. Generátorový výraz pripomína zoznamové porozumenie a podobne funkcie lambda , výrazy generátora vytvárajú anonymné funkcie generátora.

Pozrite sa na príklad nižšie:

PRÍKLAD:

a = rozsah (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 pre x v a) tlač (c) pre y v c: tlač (y)

VÝKON:

Porozumenie zoznamu: [2, 3, 4, 5, 6, 7]

Generátorový výraz:

2
3
4
5
6

Ako vidíte, vo vyššie uvedenom výstupe je prvým výrazom porozumenie zoznamu, ktoré je uvedené v zátvorkách []. Funkcia Zoznam s porozumením vytvorí úplný zoznam položiek naraz. Ďalším je výraz generátora, ktorý vracia rovnaké položky, ale jednu po druhej. Je určená v zátvorkách ().


Generátorfunkcie je možné použiť aj v rámci iných funkcií.Napríklad:

PRÍKLAD:

a = rozsah (6) tlač ('Generátorový výraz', koniec = ': n') c = (x + 2 pre x v a) tlač (c) tlač (min (c))

VÝKON:

Generátorový výraz
2

Vyššie uvedený program vytlačí minimálnu hodnotu, keď sa vyššie uvedený výraz použije na hodnoty a.

Prípady použitia:

Použime generátory v do:

  • Vytvorte sériu Fibonacci
  • Generujú sa čísla

Generovanie série Fibonacci:

Fibonacciho séria, ako všetci vieme, je séria čísel, kde každé číslo je súčtom predchádzajúcich dvoch čísel. Prvé dve čísla sú 0 a 1. Tu je program generátora na generovanie série Fibonacci:

PRÍKLAD:

def fibo (): first, second = 0,1 while True: yield first first, second = second, first + second for x in fibo (): if x> 50: break print (x, end = '')

VÝKON:

0 1 1 2 3 5 8 13 21 34

Vyššie uvedený výstup zobrazuje sériu Fibonacci s hodnotami menšími ako 50. Poďme sa teraz pozrieť na to, ako vygenerovať zoznam čísel.

Generovanie čísel:

Ak chcete vygenerovať zadané zoznamové čísla, môžete to urobiť pomocou funkcií generátora. Pozrite sa na nasledujúci príklad:

PRÍKLAD:

a = rozsah (10) b = (x pre x v a) tlač (b) pre y v b: tlač (y)

VÝKON:

0
jeden
2
3
4
5
6
7
8
9

PRÍKLAD:

ako nastaviť cestu java v systéme Windows -
a = rozsah (2,10,2) b = (x pre x v a) tlač (b) pre y v b: tlač (y)

VÝKON:


2
4
6
8

Vyššie uvedený program vrátil párne čísla od 2 do 10. Týmto sa dostávame na koniec tohto článku o Generátoroch v Pythone. Dúfam, že ste pochopili všetky témy.

Určite cvičte čo najviac a obráťte sa na svoje skúsenosti.

Máte na nás otázku? Uveďte to, prosím, v sekcii komentárov v tomto blogu „Generátory v Pythone“ a my sa vám ozveme čo najskôr.

Ak chcete získať podrobné informácie o Pythone a jeho rôznych aplikáciách, môžete sa zaregistrovať naživo s nepretržitou podporou a doživotným prístupom.