Määritelmä: Generaattori on kuin normaali toiminto, joka tuottaa arvon alueiden avulla saanto avainsana. Se palauttaa yhden objektin kerrallaan. Se käyttää sisäisesti iteraattoria. Seuraavan elementin käyttäminen Seuraava() toimintoa käytetään tai voimme käyttää sitä varten silmukka. Jos yritämme käyttää arvoa alueen ulkopuolella, se nostaa a StopIteration virhe.
Näemme esimerkin ymmärtämään paremmin
Esim .: generaattoritoiminto arvojen alueelle
def range_fun (n):x = 0
kun x < n:
saanto x
x + = 1
y = range_fun (3)
# kutsu käyttää silmukalle
tulosta ('Luo arvot käyttämällä seuraavaa () -menetelmää')
i: lle alueella_fun (3):
tulosta (i)
#puhelun generaattori seuraavalla menetelmällä
tulosta ('Luo arvot käyttämällä silmukan menetelmää')
tulosta (seuraava (y))
tulosta (seuraava (y))
tulosta (seuraava (y))
tulosta (seuraava (y)) # Stop Iteration -poikkeus nousee
Esim: Generaattoritoiminto Fibonacci-sarjalle
def fib_fun (n):x, y = 0, 1
kun x < n:
saanto x
x, y = y, x + y
z = fib_fun (6) #generator-objekti
tulosta ('Luo arvoja käyttämällä next () -menetelmää')
tulosta (seuraava (z))
tulosta (seuraava (z))
tulosta (seuraava (z))
tulosta (seuraava (z))
tulosta (seuraava (z))
tulosta (seuraava (z))
tulosta ('Luo arvot käyttämällä silmukan menetelmää')
i: lle fib_funissa (6):
tulosta (i)
Esim: Generaattoritoiminto arvojen alueen luomiseksi annettujen alku- ja loppuarvojen perusteella.
def my_range (alku, loppu):virta = alku
kun taas nykyinen < end:
tuottovirta
virta + = 1
tulosta ('Luo arvot käyttämällä seuraavaa () -menetelmää')
nums = oma_alue (1,5)
tulosta (seuraava (summat))
tulosta (seuraava (summat))
tulosta (seuraava (summat))
tulosta (seuraava (summat))
tulosta ('Luo arvot käyttämällä silmukka-menetelmää')
numerolle omalla alueellani (1,5):
tulosta (numero)
Esim: Generaattori kertomaan jokainen numero (vähemmän kuin numero) luvulla
def gen_mulby_num (enimmäismäärä, lukumäärä):n = 0
kun taas n < max:
saanto n * numero
n + = 1
i: lle ryhmässä gen_mulby_num (5,3):
tulosta (i)
Esim: Generaattori kuution löytämiseksi arvojen alueelle
def gen_mulby_num (enimmäismäärä, lukumäärä):n = 0
kun taas n < max:
saanto n * numero
n + = 1
i: lle ryhmässä gen_mulby_num (5,3):
tulosta (i)
Esim: useita generaattoreita: etsi luvusta muodostettujen parillisten numeroiden neliö
Generaattori 1: Luo parilliset arvot tietystä luvusta
Generaattori 2: luo neliönumerot generaattorin1 arvoista
def gen_even (m):n = 0
kun taas n < m:
jos n% 2 == 0:
saanto n
n + = 2
def gen_square (luvut):
numerolle numeroina:
saanto 2 * num
n: lle gen_neliössä (gen_even (15)):
tulosta (n)
Esim: Useita generaattoreita: luo fibnacci-sarjoja ja lisää arvoa 10 jokaiselle numerolle.
Generaattori1: tuottaa fibonacci-sarjan tietystä numerosta
Generaattori2: lisää kukin numero 10 generaattorista1
def gen_fib (n):x, y = 0, 1
kun x < n:
saanto x
x, y = y, x + y
def gen_add_10 (summat):
numerolle numeroina:
saanto 10 + num
n: lle gen_add_10: ssä (gen_fib (5)):
tulosta (n)
Generaattorin käsitykset:
Generaattorin ymmärtäminen on samanlainen kuin luettelon ymmärtäminen, jossa luettelossa käytetään hakasulkeita; tämä käyttää normaalia sulkeita.
Esim:
nums = (i i: lle alueella (10))tulosta (tyyppi (summat))
tulosta (luettelo (numerot))
Generaattorin ja normaalin toiminnan ero:
- Generaattori antaa arvot käyttämällä saanto avainsana, jossa normaali toiminto käyttää palata avainsana
- Generaattori alkaa siitä, mihin se pysähtyi, kun sitä kutsutaan seuraavan kerran. Normaali toiminto suorittaa kaikki lauseet joka kerta.
- Generaattori säästää muistia, koska se palauttaa yhden arvon kerrallaan. Joten voimme käyttää sitä loputtomien arvojen tuottamiseen.
Päätelmä:
Generaattori on erittäin hyödyllinen, kun käsittelemme valtavia / suuria tietoja. Tiettynä ajankohtana siinä on vain yksi yksittäinen tieto kokonaisen datan sijaan. Generaattorikonseptia pidetään edistyneenä konseptina pythonissa.