Co jsou generátory v Pythonu a jak je používat?

Zjistěte, jaké jsou generátory v Pythonu spolu s výhodami. Naučte se také, jak je vytvářet a používat spolu s různými případy použití.

Generování iterabilních objektů nebo objektů, které umožňují překračování, se považuje za obtížný úkol. Ale v , implementace tohoto bolestivého úkolu je opravdu hladká. Pojďme se tedy podívat blíže na Generátory v Pythonu.

Zde je seznam všech témat zahrnutých v tomto článku:





Tak pojďme začít :)

Co jsou generátory v Pythonu?

Generátory jsou v zásadě funkce, které vracejí procházitelné objekty nebo položky. Tyto funkce neprodukují všechny položky najednou, spíše je produkují po jedné a pouze v případě potřeby. Kdykoli je zahrnut k iteraci přes sadu položek, je spuštěna funkce generátoru. Generátory mají také řadu výhod.



java je vztah

Výhody používání generátorů

  • Bez generátorů v Pythonu je výroba iterable extrémně obtížná a zdlouhavá.

  • Snadno implementovatelné generátory, protože automaticky implementují __iter __ (), __next __ () a StopIteration, které by jinak musely být výslovně uvedeny.



  • Paměť se ukládá, protože položky se vyrábějí podle potřeby, na rozdíl od normálu . Tato skutečnost se stává velmi důležitou, když potřebujete vytvořit obrovské množství iterátorů. To je také považováno za největší výhodu generátorů.

  • Lze použít k výrobě nekonečného množství položek.

  • Lze je také použít k pipeline řady operací

Normální funkce vs. funkce generátoru:

Generátory v Pythonu se vytvářejí stejně, jako vytváříte pomocí klíčového slova „def“. Funkce generátoru však místo návratnosti používají klíčové slovo výnos. Tímto způsobem upozorníme tlumočníka, že se jedná o iterátor. Nejen to, jsou generátorové funkce spuštěny, když je volána funkce next (), a nikoli podle jejich názvu, jako v případě normálních funkcí. Zvažte následující příklad, abyste tomu lépe porozuměli:

PŘÍKLAD:

def func (a): výnos a a = [1,2,3] b = func (a) next (b)

VÝSTUP: [1, 2, 3]

Jak vidíte, ve výše uvedeném výstupu func () využívá pro své spuštění klíčové slovo výnos a další funkci. Ale pro normální funkci budete potřebovat následující část kódu:

PŘÍKLAD:

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

VÝSTUP: [1, 2, 3]

Pokud se podíváte na výše uvedený příklad, možná vás zajímá, proč použít funkci Generátor, když normální funkce také vrací stejný výstup. Pojďme tedy dál a podívejme se, jak používat generátory v Pythonu.

Použití funkcí generátoru:

Jak již bylo zmíněno dříve, generátory v Pythonu vytvářejí iterovatelné jeden po druhém. Podívejte se na následující příklad:

PŘÍKLAD:

def myfunc (a): while a> = 3: yield a a = a + 1 b = myfunc (a) print (b) next (b)

Když spustíte následující funkci, uvidíte následující výstup:

VÝSTUP: 4

Zde byl vrácen jeden iterovatelný objekt splňující podmínku while. Po provedení je ovládací prvek přenesen na volajícího. V případě, že je potřeba více položek, je třeba stejnou funkci znovu provést voláním funkce next ().

další (b)

VÝSTUP: 5

Při dalších provedeních funkce vrátí 6,7 atd. Funkce generátoru v Pythonu implementují metody __iter __ () a __next __ () automaticky. Proto můžete iterovat nad objekty pouze pomocí metody next (). Když by mělo být generování položky ukončeno, funkce generátoru implementují StopIterace interně, aniž byste se museli obávat volajícího. Zde je další příklad:

PŘÍKLAD:

a = 2 def myfunc (a): while a> = 0: yield a a - = 1 b = myfunc (a) print (b) next (b)

VÝSTUP:

Generátory stopIteration v Pythonu-EdureceVýše uvedený obrázek ukazuje, kolikrát bylo nutné provést program. Pokud se pokusíte znovu zavolat další funkci, vrátí zprávu zobrazující StopIterace byl implementován. Pokud to zkusíte s normálními funkcemi, vrácené hodnoty se nezmění ani nebudou iterovat. Podívejte se na níže uvedený příklad:

PŘÍKLAD:

def z (): n = 1 výtěžek n n = n + 3 výtěžek n p = z () další (p)

VÝSTUP:

Generátory se smyčkami:

Pokud chcete spustit stejnou funkci najednou, můžete použít smyčku „pro“. Tato smyčka pomáhá iterovat nad objekty a po všech implementacích provede StopIteration.

PŘÍKLAD:

def z (): n = 1 výtěžek n n = n + 3 výtěžek n pro x in z (): print (x)

VÝSTUP:

jeden
4

Můžete také zadat výrazy pro generování iterovatelných objektů.

Výrazy generátoru:

Můžete také použít výrazy spolu se smyčkou for k vytvoření iterátorů. Toto obvykle usnadňuje generování iterable. Generátorový výraz připomíná seznam a podobně funkce lambda , výrazy generátoru vytvářejí anonymní funkce generátoru.

Podívejte se na níže uvedený příklad:

PŘÍKLAD:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 pro x v a) tisk (c) pro y v c: tisk (y)

VÝSTUP:

Porozumění seznamu: [2, 3, 4, 5, 6, 7]

Generátorový výraz:

2
3
4
5
6

Jak vidíte, ve výše uvedeném výstupu je prvním výrazem porozumění seznamu, které je uvedeno v závorkách []. Seznam s porozuměním vytváří úplný seznam položek najednou. Další je výraz generátoru, který vrací stejné položky, ale jednu po druhé. Určuje se pomocí () závorek.


Generátorfunkce lze použít i v rámci jiných funkcí.Například:

PŘÍKLAD:

a = range (6) print ('Generator expression', end = ': n') c = (x + 2 for x in a) print (c) print (min (c))

VÝSTUP:

Generátorový výraz
2

Výše uvedený program vytiskne minimální hodnotu, když se výše uvedený výraz použije na hodnoty a.

Případy užití:

Pojďme použít generátory v na:

  • Vytvořte řadu Fibonacci
  • Generování čísel

Generování série Fibonacci:

Fibonacciho řada, jak všichni víme, je řada čísel, kde každé číslo je součtem předchozích dvou čísel. První dvě čísla jsou 0 a 1. Zde je program generátoru pro generování řady Fibonacci:

PŘÍ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ÝSTUP:

0 1 1 2 3 5 8 13 21 34

Výše uvedený výstup ukazuje řadu Fibonacci s hodnotami menšími než 50. Pojďme se nyní podívat, jak vygenerovat seznam čísel.

Generování čísel:

V případě, že chcete vygenerovat zadaná čísla seznamu, můžete to udělat pomocí funkcí generátoru. Podívejte se na následující příklad:

PŘÍKLAD:

a = rozsah (10) b = (x pro x v a) tisk (b) pro y v b: tisk (y)

VÝSTUP:

0
jeden
2
3
4
5
6
7
8
9

PŘÍKLAD:

řetězec java rozděluje více oddělovačů
a = rozsah (2,10,2) b = (x pro x v a) tisk (b) pro y v b: tisk (y)

VÝSTUP:


2
4
6
8

Výše uvedený program vrátil sudá čísla od 2 do 10. Tím se dostáváme na konec tohoto článku o Generátorech v Pythonu. Doufám, že jste pochopili všechna témata.

Ujistěte se, že cvičíte co nejvíce a vraťte své zkušenosti.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto blogu „Generátoři v Pythonu“ a my se vám ozveme co nejdříve.

Chcete-li získat podrobné znalosti o Pythonu spolu s jeho různými aplikacemi, můžete se zaregistrovat naživo s nepřetržitou podporou a doživotním přístupem.