Definicija: Generator je kot običajna funkcija, ki generira vrsto vrednosti z uporabo donos ključna beseda. Vrne en predmet naenkrat. Interno uporablja iterator. Za dostop do naslednjega elementa Naslednji() funkcija ali pa jo lahko uporabimo za zanko. Če poskušamo dostopati do vrednosti zunaj obsega, se poveča a StopIteration napaka.
Videli bomo nekaj primerov za boljše razumevanje
Primer: funkcija generatorja za obseg vrednosti
def range_fun (n):x = 0
medtem ko x < n:
donos x
x + = 1
y = obseg_zabave (3)
#call z uporabo zanke
print ('Ustvari vrednosti z uporabo metode next ()')
za i v range_fun (3):
natisni (i)
#call generator z naslednjo metodo
print ('Ustvari vrednosti z uporabo metode zanke')
natisni (naslednji (y))
natisni (naslednji (y))
natisni (naslednji (y))
print (naslednji (y)) # Pojavila se bo izjema Stop Iteration
Napr: Funkcija generatorja za serijo Fibonacci
def fib_fun (n):x, y = 0, 1
medtem ko x < n:
donos x
x, y = y, x + y
z = fib_fun (6) # objekt generatorja
print ('Ustvari vrednosti z uporabo metode next ()')
natisni (naslednji (z))
natisni (naslednji (z))
natisni (naslednji (z))
natisni (naslednji (z))
natisni (naslednji (z))
natisni (naslednji (z))
print ('Ustvari vrednosti z uporabo metode zanke')
za i v fib_fun (6):
natisni (i)
Napr: Generatorska funkcija za ustvarjanje obsega vrednosti glede na začetno in končno vrednost.
def my_range (začetek, konec):tok = začetek
medtem ko je trenutna < end:
donosni tok
tok + = 1
print ('Ustvari vrednosti z uporabo metode next ()')
nums = moj_razpon (1,5)
tiskanje (naslednje (številke))
tiskanje (naslednje (številke))
tiskanje (naslednje (številke))
tiskanje (naslednje (številke))
print ('Ustvari vrednosti z uporabo metode zanke')
za num v my_range (1,5):
natisni (številka)
Napr: Generator za množenje vsakega števila (manjšega od števila) s številom
def gen_mulby_num (največ, število):n = 0
medtem ko je n < max:
donos n * štev
n + = 1
za i v gen_mulby_num (5,3):
natisni (i)
Napr: Generator za iskanje kocke za obseg vrednosti
def gen_mulby_num (največ, število):n = 0
medtem ko je n < max:
donos n * štev
n + = 1
za i v gen_mulby_num (5,3):
natisni (i)
Napr: več generatorjev: poiščite kvadrat parnih števil, ustvarjenih iz števila
Generator 1: generiranje parnih vrednosti iz danega števila
Generator 2: ustvari kvadratna števila iz vrednosti generator1
def gen_even (m):n = 0
medtem ko je n < m:
če je n% 2 == 0:
donos n
n + = 2
def gen_square (številke):
za num v nums:
donos 2 * štev
za n v gen_square (gen_even (15)):
natisni (n)
Napr: Več generatorjev: ustvarite fibnaccijeve nize in dodajte vrednost 10 za vsako številko.
Generator1: generira fibonačijeve nize iz danega števila
Generator2: dodajte vsako število za 10 iz generator1
def gen_fib (n):x, y = 0, 1
medtem ko x < n:
donos x
x, y = y, x + y
def gen_add_10 (nums):
za num v nums:
donos 10 + štev
za n v gen_add_10 (gen_fib (5)):
natisni (n)
Razumevanja generatorja:
Razumevanja generatorja so podobna razumevanjem seznama, kjer seznam uporablja oglate oklepaje; ta uporablja običajne oklepaje.
Napr:
nums = (i za i v območju (10))tiskanje (vrsta (številke))
natisni (seznam (številke))
Razlika med generatorjem in normalno funkcijo:
- Generator podaja vrednosti z uporabo donos ključna beseda, kjer običajna funkcija uporablja vrnitev ključna beseda
- Generator se zažene od mesta, kjer se je ob naslednjem klicu ustavil. Običajna funkcija vsakič izvrši vse stavke.
- Generator shrani pomnilnik, saj vrne eno vrednost naenkrat. Tako ga lahko uporabimo za ustvarjanje neskončnih vrednosti.
Zaključek:
Generator je zelo koristen pri obdelavi ogromnih / velikih podatkov. V določenem trenutku vsebuje le en sam del podatkov in ne celotnih podatkov. Koncept generatorjev velja za napreden koncept v pythonu.