Definition: En generator er som en normal funktion, der genererer en række værdier ved hjælp af udbytte nøgleord. Det returnerer et objekt ad gangen. Det bruger internt en iterator. For at få adgang til det næste element Næste() funktionen bruges, eller vi kan bruge den til en løkke. Hvis vi forsøger at få adgang til værdien uden for området, hæver det a StopIteration fejl.
Vi vil se nogle eksempler for at forstå bedre
Eks: generatorfunktion til værdiområde
def range_fun (n):x = 0
mens x < n:
udbytte x
x + = 1
y = rækkevidde (3)
#call ved hjælp af for loop
print ('Generer værdier ved hjælp af næste () metode')
til jeg i rækkevidde (3):
udskrive (i)
#call generator ved hjælp af næste metode
print ('Generer værdier ved hjælp af loop-metoden')
udskriv (næste (y))
udskriv (næste (y))
udskriv (næste (y))
udskriv (næste (y)) # Undtagelse med stop-gentagelse hæves
Eks: Generatorfunktion til Fibonacci-serien
def fib_fun (n):x, y = 0, 1
mens x < n:
udbytte x
x, y = y, x + y
z = fib_fun (6) #generatorobjekt
print ('Generer værdier ved hjælp af næste () metode')
udskriv (næste (z))
udskriv (næste (z))
udskriv (næste (z))
udskriv (næste (z))
udskriv (næste (z))
udskriv (næste (z))
print ('Generer værdier ved hjælp af loop-metoden')
for jeg i fib_fun (6):
udskrive (i)
Eks: Generatorfunktion til oprettelse af række af værdier givet start- og slutværdier.
def my_range (start, slut):nuværende = start
mens det er aktuelt < end:
udbyttestrøm
nuværende + = 1
print ('Generer værdier ved hjælp af næste () metode')
nums = min_range (1,5)
udskriv (næste (numre))
udskriv (næste (numre))
udskriv (næste (nums))
udskriv (næste (numre))
print ('Generer værdier ved hjælp af loop-metoden')
for num i min_range (1,5):
print (num)
Eks: Generator til at multiplicere hvert tal (mindre end et tal) med et tal
def gen_mulby_num (max, num):n = 0
mens n < max:
udbytte n * antal
n + = 1
for jeg i gen_mulby_num (5,3):
udskrive (i)
Eks: Generator til at finde terning til værdiområde
def gen_mulby_num (max, num):n = 0
mens n < max:
udbytte n * antal
n + = 1
for jeg i gen_mulby_num (5,3):
udskrive (i)
Eks: flere generatorer: find firkanten af lige tal genereret fra et tal
Generator 1: generer lige værdier fra et givet nummer
Generator 2: generer kvadrattal fra generator1-værdier
def gen_even (m):n = 0
mens n < m:
hvis n% 2 == 0:
udbytte n
n + = 2
def gen_square (nums):
for num in nums:
udbytte 2 * antal
for n i gen_square (gen_even (15)):
print (n)
Eks: Flere generatorer: Opret fibnacci-serier og tilføj værdi 10 hvert nummer.
Generator1: genererer Fibonacci-serier fra et givet nummer
Generator2: tilføj hvert nummer med 10 fra generator1
def gen_fib (n):x, y = 0, 1
mens x < n:
udbytte x
x, y = y, x + y
def gen_add_10 (nums):
for num in nums:
udbytte 10 + antal
for n i gen_add_10 (gen_fib (5)):
print (n)
Generatorforståelser:
Generatorforståelser svarer til listeforståelser, hvor listen bruger firkantede parenteser; dette bruger normal parentes.
Eks:
nums = (i for i inden for rækkevidde (10))print (type (nums))
udskriv (liste (nums))
Forskel mellem generator og normal funktion:
- En generator giver værdier ved hjælp af udbytte nøgleord, hvor normal funktion bruger Vend tilbage nøgleord
- Generator starter fra, hvor den stoppede, når den blev ringet op næste gang. Den normale funktion udfører alle udsagn hver gang.
- Generator gemmer hukommelse, da den returnerer en værdi ad gangen. Så vi kan bruge det til at generere uendelige værdier.
Konklusion:
Generator er meget nyttigt, når vi håndterer store / store data. På et givet tidspunkt indeholder det kun et enkelt stykke data snarere end hele data. Generatorkoncept betragtes som et avanceret koncept i python.