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:
- Čo sú to generátory?
- Výhody použitia generátorov
- Normálne funkcie vs funkcie generátora
- Používanie funkcií generátora
- Generátory so slučkami
- Výrazy generátora
- Prípady použitia
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:
Vyšš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.