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:
- Mik azok a generátorok?
- A generátorok használatának előnyei
- Normál funkciók vs generátor funkciók
- Generátor funkciók használata
- Generátorok hurokkal
- Generátor kifejezések
- Használjon tokokat
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:
A 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.