Definitsioon: Generaator on nagu tavaline funktsioon, mis genereerib väärtuste vahemiku, kasutades saagikus märksõna. See tagastab ühe objekti korraga. See kasutab sisemiselt iteraatorit. Järgmisele elemendile juurdepääsemiseks järgmine () funktsiooni kasutatakse või saame seda kasutada eest silmus. Kui proovime juurdepääsu väärtusele väljaspool vahemikku, tõstab see a StopIteration viga.
Parema mõistmise jaoks näeme mõnda näidet
Nt: generaatori funktsioon väärtuste vahemiku jaoks
def vahemik_fun (n):x = 0
samal ajal kui x < n:
saagis x
x + = 1
y = vahemiku_hulk (3)
# kõne kasutab loopi jaoks
print ('Väärtuste genereerimine järgmise () meetodi abil')
i jaoks vahemikus_käitumine (3):
trükk (i)
#kõne generaator järgmise meetodi abil
print ('Väärtuste loomine silmusmeetodi abil')
print (järgmine (y))
print (järgmine (y))
print (järgmine (y))
print (järgmine (y)) # Tõstetakse iteratsiooni peatamise erand
Nt: Generaatori funktsioon Fibonacci seeria jaoks
def fib_fun (n):x, y = 0, 1
samal ajal kui x < n:
saagis x
x, y = y, x + y
z = fib_fun (6) #generaatori objekt
print ('Väärtuste genereerimine järgmise () meetodi abil')
print (järgmine (z))
print (järgmine (z))
print (järgmine (z))
print (järgmine (z))
print (järgmine (z))
print (järgmine (z))
print ('Väärtuste loomine silmusmeetodi abil')
i jaoks fib_funis (6):
trükk (i)
Nt: Generaatori funktsioon algus- ja lõppväärtuste väärtuste vahemiku loomiseks.
def minu_vahemik (algus, lõpp):praegune = algus
samas praegune < end:
voolu vool
vool + = 1
print ('Väärtuste genereerimine järgmise () meetodi abil')
arv = minu_vahemik (1,5)
prindi (järgmine (arv))
prindi (järgmine (arv))
print (järgmine (arv)
print (järgmine (arv)
print ('Väärtuste loomine silmusmeetodi abil')
arvule vahemikus minu_vahemik (1,5):
print (arv)
Nt: Generaator iga numbri (vähem kui arv) korrutamiseks numbriga
def gen_mulby_num (max, arv):n = 0
samas n < max:
saagis n * arv
n + = 1
i jaoks gen_mulby_num (5,3):
trükk (i)
Nt: Generaator kuupi leidmiseks väärtuste vahemiku jaoks
def gen_mulby_num (max, arv):n = 0
samas n < max:
saagis n * arv
n + = 1
i jaoks gen_mulby_num (5,3):
trükk (i)
Nt: mitu generaatorit: leidke numbrist genereeritud paarisarvude ruut
1. generaator: genereerige antud arvust paarisväärtused
2. generaator: genereerige ruutu numbrid generaatori1 väärtustest
def gen_even (m):n = 0
samas n < m:
kui n% 2 == 0:
saagis n
n + = 2
def gen_square (arv):
numbritele arvudes:
saagis 2 * arv
n jaoks gen_square'is (gen_even (15)):
print (n)
Nt: Mitu generaatorit: looge fibnacci seeria ja lisage iga numbri jaoks väärtus 10.
Generator1: genereerib etteantud arvust fibonacci seeria
Generaator2: lisage generaatorist 1 iga arv 10 võrra
def gen_fib (n):x, y = 0, 1
samal ajal kui x < n:
saagis x
x, y = y, x + y
def gen_add_10 (arv):
numbritele arvudes:
saagis 10 + arv
n jaoks gen_add_10 (gen_fib (5)):
print (n)
Generaatori arusaamad:
Generaatori arusaamad on sarnased loendi mõistmistega, kus loendis kasutatakse nurksulgusid; see kasutab tavalisi sulgusid.
Nt:
arv = (i i jaoks vahemikus (10))print (tüüp (arv))
print (loend (arv))
Generaatori ja normaalse funktsiooni erinevus:
- Generaator annab väärtused, kasutades saagikus märksõna, kus tavaline funktsioon kasutab tagasi märksõna
- Generaator algab sealt, kus see järgmisel korral helistati. Tavaline funktsioon täidab kõik väited iga kord.
- Generaator salvestab mälu, kuna see tagastab korraga ühe väärtuse. Seega saame seda kasutada lõpmatute väärtuste genereerimiseks.
Järeldus:
Generaatorist on palju abi, kui töötleme tohutute / suurte andmetega. Teatud ajahetkel mahutab see ainult ühe üksiku, mitte tervete andmete. Generaatorite kontseptsiooni peetakse püütonis täiustatud kontseptsiooniks.