Mik a generátorok a Python-ban és hogyan használhatók?



Megismerheti a Python generátorait és az előnyöket. Ismerje meg, hogyan kell létrehozni és használni őket a különféle használati esetekkel együtt.

Olyan iterable vagy objektum létrehozása, amely lehetővé teszi az átlépést, megterhelő feladat. De , ennek a fájdalmas feladatnak a végrehajtása csak nagyon zökkenőmentessé válik. Tehát menjünk előre, és nézzük meg közelebbről a Generátorokat a Pythonban.

Az alábbiakban felsoroljuk a cikkben tárgyalt összes témát:





Kezdjük hát. :)

Mik a generátorok a Pythonban?

A generátorok alapvetően olyan funkciók, amelyek átjárható objektumokat vagy elemeket adnak vissza. Ezek a függvények nem állítják elő az összes elemet egyszerre, inkább egyenként és csak szükség esetén állítják elő őket. Valahányszor a tartalmaz egy tételkészleten keresztüli iterációt, egy generátor funkció fut. A generátoroknak számos előnye is van.



A generátorok használatának előnyei

  • Generátorok nélkül a Pythonban az iterable-ek előállítása rendkívül nehéz és hosszú.

  • A generátorok könnyen implementálhatók, mivel automatikusan megvalósítják a __iter __ (), __next __ () és a StopIteration programokat, amelyeket egyébként meg kell határozni.



  • A memória mentésre kerül, amikor az elemeket szükség szerint állítják elő, a normálistól eltérően . Ez a tény akkor válik nagyon fontossá, amikor hatalmas számú iterátort kell létrehozni. Ezt tekintik a generátorok legnagyobb előnyének is.

  • Végtelen számú tétel előállítására használható.

  • Számos művelet vezetésére is használhatók

Normál funkciók vs generátor funkciók:

A Python generátorai ugyanúgy jönnek létre, mint ahogy Ön a „def” kulcsszó használatával. De a Generator függvények a hozam kulcsszót használják a return helyett. Ez azért történik, hogy értesítse a tolmácsot, hogy ez iterátor. Nem csak ez, a Generator függvények a következő () függvény meghívásakor futnak, és nem a nevükön, mint normál függvények esetén. Vegye fontolóra a következő példát, hogy jobban megértse:

PÉLDA:

def func (a): a = [1,2,3] b = func (a) következő (b)

KIMENET: [1, 2, 3]

Mint látható, a fenti kimenetben a func () a hozam kulcsszót és a következő függvényt használja a végrehajtásához. A normál működéshez azonban a következő kódra lesz szükség:

PÉLDA:

php print_r tömb
def func (a): adjon vissza egy a = [1,2,3] func (a)

KIMENET: [1, 2, 3]

Ha megnézi a fenti példát, elgondolkodhat azon, miért érdemes használni a Generator funkciót, amikor a normál funkció is ugyanazt a kimenetet adja vissza. Tehát lépjünk tovább, és nézzük meg, hogyan kell használni a Generátorokat a Pythonban.

Generátor funkciók használata:

Mint korábban említettük, a Pythonban található generátorok egyenként hoznak létre iterable programokat. Vessen egy pillantást a következő példára:

PÉLDA:

def myfunc (a): míg a> = 3: a = a + 1 b = myfunc (a) print (b) következő (b)

A következő funkció végrehajtásakor a következő kimenetet fogja látni:

KIMENET: 4

Itt egy iterálható objektumot adtak vissza, eleget téve a while feltételnek. A végrehajtás után a vezérlés átkerül a hívónak. Ha több elemre van szükség, ugyanazt a függvényt újra kell végrehajtani a következő () függvény meghívásával.

következő (b)

KIMENET: 5.

További végrehajtások esetén a függvény 6,7-et ad vissza. A Pythonban található generátorfüggvények automatikusan végrehajtják a __iter __ () és a __next __ () metódust. Ezért a következő () metódussal iterálhat az objektumok felett. Amikor az elemgenerálásnak le kell állnia, a Generator funkciók végrehajtják a StopIteration belsőleg anélkül, hogy aggódnia kellene a hívó félnél. Itt van egy másik példa erre:

PÉLDA:

a = 2 def myfunc (a): míg a> = 0: a a = = 1 b = myfunc (a) print (b) következő (b)

KIMENET:

StopIteration-Generátorok a Python-EdurekábanA fenti képen a programunk végrehajtása szükséges számú alkalommal látható. Ha újra megpróbálja meghívni a következő függvényt, akkor az egy üzenetet jelenít meg StopIteration megvalósult. Ha ezt normál funkciókkal próbálja megtenni, akkor a visszaadott értékek nem változnak vagy ismétlődnek. Vessen egy pillantást az alábbi példára:

PÉLDA:

def z (): n = 1 hozam n n = n + 3 hozam n p = z () következő (p)

KIMENET:

Generátorok hurkokkal:

Abban az esetben, ha ugyanazt a funkciót egyszerre szeretné végrehajtani, használhatja a ’for’ ciklust. Ez a hurok segít az objektumok iterációjában, és minden megvalósítás után végrehajtja a StopIteration programot.

PÉLDA:

def z (): n = 1 hozam n n = n + 3 hozam n x-re z-ben (): print (x)

KIMENET:

egy
4

Az iterálható objektumok előállításához kifejezéseket is megadhat.

Generátor kifejezések:

Az iterátorok előállításához használhat kifejezéseket a for ciklussal együtt. Ez általában sokkal egyszerűbbé teszi a generációs iterable-eket. A generátor kifejezés hasonló a listamegértésekhez és hasonlókhoz lambda funkciók , a generátor kifejezések névtelen generátor funkciókat hoznak létre.

Vessen egy pillantást az alábbi példára:

PÉLDA:

a = tartomány (6) print ('Lista megértése', vég = ':') b = [x + 2 x-hez a] print (b) print ('Generátor kifejezés', end = ': n') c = (x + 2 x-hez a) nyomtatás (c) y-hez c-ben: print (y)

KIMENET:

A lista megértése: [2, 3, 4, 5, 6, 7]

Generátor kifejezés:

2
3
4
5.
6.

Amint láthatja, a fenti kimenetben az első kifejezés a [] zárójelben megadott listaértés. A lista megértése egyszerre állítja össze az elemek teljes listáját. A következő egy generátor kifejezés, amely ugyanazokat az elemeket adja vissza, de egyenként. A () zárójelek segítségével adható meg.


Generátora funkciók más funkciókon belül is használhatók.Például:

PÉLDA:

a = tartomány (6) print ('Generátor kifejezés', vég = ': n') c = (x + 2 x-hez a) print (c) print (min (c))

KIMENET:

Generátor kifejezés
2

A fenti program kinyomtatja a min értéket, amikor a fenti kifejezést az a értékeire alkalmazzuk.

Használati esetek:

Használjuk a Generátorokat nak nek:

objektumok tömbje a java példa programban
  • Generálja a Fibonacci sorozatot
  • Számok generálása

A Fibonacci sorozat generálása:

A Fibonacci-sorozat, amint mindannyian tudjuk, egy olyan számsorozat, amelyben minden szám az előző két szám összege. Az első két szám 0 és 1. Itt van egy generátor program a Fibonacci sorozat előállításához:

PÉLDA:

def fibo (): első, második = 0,1, míg True: először adja meg az elsőt, a második = második, az első + másodperc x-et a fibo-ban (): ha x> 50: törésnyomtatás (x, vég = '

KIMENET:

0 1 1 2 3 5 8 13 21 34

A fenti kimenet a Fibonacci-sorozatot mutatja, amelynek értéke kisebb, mint 50. Most nézzük meg, hogyan lehet generálni egy számlistát.

Számok generálása:

Abban az esetben, ha meghatározott listaszámokat szeretne létrehozni, a generátorfunkciók segítségével megteheti. Vessen egy pillantást a következő példára:

PÉLDA:

a = tartomány (10) b = (x x-hez a) print (b) y-hez b-ben: print (y)

KIMENET:

0
egy
2
3
4
5.
6.
7
8.
9.

PÉLDA:

a = tartomány (2,10,2) b = (x x-hez a-ban) print (b) y-hez b-ben: print (y)

KIMENET:


2
4
6.
8.

A fenti program páros számokat adott vissza 2-től 10-ig. Ezzel a Python Generátorokról szóló cikkünk végére érünk. Remélem, megértett minden témát.

Győződjön meg arról, hogy a lehető legtöbbet gyakorolja, és állítsa vissza a tapasztalatait.

Van egy kérdésünk? Kérjük, említse meg a „Generátorok a Pythonban” blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.

Ha részletes ismereteket szeretne szerezni a Pythonról és annak különböző alkalmazásokról, regisztrálhat élőben 24/7 támogatással és élethosszig tartó hozzáféréssel.