Generatoriai Python

„Python“ generatorius yra funkcija, kuri grąžina iteratorių naudojant raktinį žodį „Išeiga“. Šiame straipsnyje aptarsime, kaip generatoriaus funkcija veikia Python.

Generatoriaus funkcija Python

Generatoriaus funkcija Python apibrėžiama kaip įprasta funkcija, tačiau kai reikia sugeneruoti reikšmę, ji tai daro su derliaus raktinis žodis o ne grįžti. Jei def turinyje yra išeiga, funkcija automatiškai tampa Python generatoriaus funkcija.

Sukurkite generatorių „Python“.

„Python“ sistemoje galime sukurti generatoriaus funkciją tiesiog naudodami def raktinį žodį ir raktinį žodį „rezultatyvumas“. Generatorius turi tokią sintaksę Python :

def function_name():  yield statement 

Pavyzdys:

Šiame pavyzdyje sukursime paprastą generatorių, kuris duos tris sveikuosius skaičius. Tada mes atspausdinsime šiuos sveikuosius skaičius naudodami Python už kilpą .

Python3




# A generator function that yields 1 for first time,> # 2 second time and 3 third time> def> simpleGeneratorFun():> > yield> 1> > yield> 2> > yield> 3> > # Driver code to check above generator function> for> value> in> simpleGeneratorFun():> > print> (value)>

Išvestis:

1 2 3 

Generatoriaus objektas

Python Generator funkcijos grąžina generatoriaus objektą, kuris yra kartojamas, t. y. gali būti naudojamas kaip Iteratorius . Generatoriaus objektai naudojami iškviečiant kitą generatoriaus objekto metodą arba naudojant generatoriaus objektą for in kilpoje.

Pavyzdys:

Šiame pavyzdyje mes sukursime paprastą generatoriaus funkciją Python, kad sukurtume objektus naudodami next() funkcija .

Python3




# A Python program to demonstrate use of> # generator object with next()> > # A generator function> def> simpleGeneratorFun():> > yield> 1> > yield> 2> > yield> 3> > # x is a generator object> x> => simpleGeneratorFun()> > # Iterating over the generator object using next> > # In Python 3, __next__()> print> (> next> (x))> print> (> next> (x))> print> (> next> (x))>

Išvestis:

1 2 3 

Pavyzdys:

Šiame pavyzdyje sukursime du Fibonačio numerių generatorius, pirmąjį paprastą generatorių, o antrąjį – naudodami už kilpą .

Python3




# A simple generator for Fibonacci Numbers> def> fib(limit):> > > # Initialize first two Fibonacci Numbers> > a, b> => 0> ,> 1> > > # One by one yield next Fibonacci Number> > while> a yield a a, b = b, a + b # Create a generator object x = fib(5) # Iterating over the generator object using next # In Python 3, __next__() print(next(x)) print(next(x)) print(next(x)) print(next(x)) print(next(x)) # Iterating over the generator object using for # in loop. print(' Using for in loop') for i in fib(5): print(i)>

Išvestis:

0 1 1 2 3  Using for in loop 0 1 1 2 3 

Python generatoriaus išraiška

„Python“ generatoriaus išraiška yra dar vienas generatoriaus funkcijos rašymo būdas. Jis naudoja Python sąrašo supratimas techniką, tačiau užuot saugoję elementus sąraše atmintyje, ji sukuria generatoriaus objektus.

Generatoriaus išraiškos sintaksė

Generatoriaus išraiška Python turi tokią sintaksę:

(expression for item in iterable) 

Pavyzdys:

Šiame pavyzdyje sukursime generatoriaus objektą, kuris atspausdins 5 kartotinius tarp diapazono nuo 0 iki 5, kurie taip pat dalijasi iš 2.

Python3




# generator expression> generator_exp> => (i> *> 5> for> i> in> range> (> 5> )> if> i> %> 2> => => 0> )> > for> i> in> generator_exp:> > print> (i)>

Išvestis:

0 10 20 

Generatorių programos Python

Tarkime, kad sukuriame Fibonačio skaičių srautą, taikant generatoriaus metodą, jis tampa trivialus; tereikia paskambinti next(x), kad gautume kitą Fibonačio numerį, nesijaudindami, kur ir kada baigiasi skaičių srautas. Praktiškesnis srauto apdorojimo būdas yra didelių duomenų failų, pvz., žurnalo failų, tvarkymas. Generatoriai yra efektyvus tokio duomenų apdorojimo būdas, nes vienu tam tikru momentu tvarkomos tik failo dalys. Šiems tikslams taip pat galime naudoti Iteratorius, tačiau generatorius suteikia greitą būdą (čia nereikia rašyti __next__ ir __iter__ metodų).