Definisjon: En generator er som en normal funksjon som genererer en rekke verdier ved hjelp av utbytte nøkkelord. Den returnerer ett objekt om gangen. Den bruker en iterator internt. For å få tilgang til neste element neste () funksjonen brukes, eller vi kan bruke den til en løkke. Hvis vi prøver å få tilgang til verdien utenfor området, hever den a StoppIterasjon feil.
Vi vil se noen eksempler for å forstå bedre
Eks: generatorfunksjon for verdiområde
def range_fun (n):x = 0
mens x < n:
avkastning x
x + = 1
y = rekkevidde (3)
#call bruker for loop
skriv ut ('Generer verdier ved hjelp av neste () metode')
for jeg innen rekkevidde (3):
skrive ut (i)
#call generator ved hjelp av neste metode
print ('Generer verdier ved hjelp av loop-metoden')
skriv ut (neste (y))
skriv ut (neste (y))
skriv ut (neste (y))
skriv ut (neste (y)) # Stopp Iterasjon unntak vil bli hevet
Eks: Generatorfunksjon for Fibonacci-serien
def fib_fun (n):x, y = 0, 1
mens x < n:
avkastning x
x, y = y, x + y
z = fib_fun (6) #generatorobjekt
skriv ut ('Generer verdier ved hjelp av neste () metode')
skriv ut (neste (z))
skriv ut (neste (z))
skriv ut (neste (z))
skriv ut (neste (z))
skriv ut (neste (z))
skriv ut (neste (z))
print ('Generer verdier ved hjelp av loop-metoden')
for jeg i fib_fun (6):
skrive ut (i)
Eks: Generatorfunksjon for å lage verdiområde gitt start- og sluttverdier.
def my_range (start, slutt):gjeldende = start
mens den er aktuell < end:
avkastningsstrøm
gjeldende + = 1
skriv ut ('Generer verdier ved hjelp av neste () metode')
nums = my_range (1,5)
skriv ut (neste (tall))
skriv ut (neste (tall))
skriv ut (neste (tall))
skriv ut (neste (tall))
print ('Generer verdier ved hjelp av loop-metoden')
for num in my_range (1,5):
skriv ut (num)
Eks: Generator for å multiplisere hvert tall (mindre enn et tall) med et tall
def gen_mulby_num (max, num):n = 0
mens n < max:
avkastning n * num
n + = 1
for jeg i gen_mulby_num (5,3):
skrive ut (i)
Eks: Generator for å finne kube for verdiområde
def gen_mulby_num (max, num):n = 0
mens n < max:
avkastning n * num
n + = 1
for jeg i gen_mulby_num (5,3):
skrive ut (i)
Eks: flere generatorer: finn kvadratet med partall som genereres fra et tall
Generator 1: generer jevne verdier fra et gitt tall
Generator 2: generer kvadrattall fra generator1-verdier
def gen_even (m):n = 0
mens n < m:
hvis n% 2 == 0:
avkastning n
n + = 2
def gen_square (nums):
for num in nums:
gi 2 * antall
for n i gen_square (gen_even (15)):
skrive ut (n)
Eks: Flere generatorer: lag fibnacci-serien og legg til verdi 10 hvert tall.
Generator1: genererer Fibonacci-serier fra et gitt nummer
Generator2: legg til hvert tall med 10 fra generator1
def gen_fib (n):x, y = 0, 1
mens x < n:
avkastning x
x, y = y, x + y
def gen_add_10 (nums):
for num in nums:
gi 10 + antall
for n i gen_add_10 (gen_fib (5)):
skrive ut (n)
Generatorforståelser:
Generatorforståelser ligner på listeforståelser der listen bruker firkantede parenteser; dette bruker normal parentes.
Eks:
nums = (i for i innen rekkevidde (10))skriv ut (type (nums))
skriv ut (liste (nums))
Forskjellen mellom generator og normal funksjon:
- En generator gir verdier ved hjelp av utbytte nøkkelord der normal funksjon bruker komme tilbake nøkkelord
- Generator starter fra der den stoppet når den ble ringt neste gang. Normalfunksjonen utfører alle utsagn hver gang.
- Generator sparer minne da den returnerer en verdi om gangen. Så vi kan bruke den til å generere uendelige verdier.
Konklusjon:
Generator er veldig nyttig når vi håndterer store / store data. På et gitt tidspunkt har den bare ett enkelt stykke data i stedet for hele data. Generatorkonsept betraktes som et avansert konsept i python.