Definition: En generator är som en normal funktion som genererar en rad värden med hjälp av avkastning nyckelord. Det returnerar ett objekt i taget. Den använder internt en iterator. För att komma åt nästa element Nästa() funktionen används, eller så kan vi använda den för en runda. Om vi försöker komma åt värdet utanför intervallet höjer det a StopIteration fel.
Vi kommer att se några exempel för att förstå bättre
Ex: generatorfunktion för värden
def range_fun (n):x = 0
medan x < n:
utbyte x
x + = 1
y = intervallfunktion (3)
#call använder för loop
skriv ut ('Skapa värden med nästa () metod')
för jag inom range_fun (3):
skriva ut (i)
#call generator med nästa metod
print ('Generera värden med hjälp av loop-metoden')
skriv ut (nästa (y))
skriv ut (nästa (y))
skriva ut (nästa (y))
skriv ut (nästa (y)) # Undantag för stopp-iterering kommer att höjas
Ex: Generatorfunktion för Fibonacci-serien
def fib_fun (n):x, y = 0, 1
medan x < n:
utbyte x
x, y = y, x + y
z = fib_fun (6) #generator-objekt
skriv ut ('Skapa värden med nästa () metod')
skriv ut (nästa (z))
skriv ut (nästa (z))
skriv ut (nästa (z))
skriv ut (nästa (z))
skriv ut (nästa (z))
skriv ut (nästa (z))
print ('Generera värden med hjälp av loop-metoden')
för jag i fib_fun (6):
skriva ut (i)
Ex: Generatorfunktion för att skapa intervall av värden med start- och slutvärden.
def my_range (start, slut):aktuell = start
medan den är aktuell < end:
avkastningsström
nuvarande + = 1
skriv ut ('Skapa värden med nästa () metod')
nums = mitt_område (1,5)
skriv ut (nästa (siffror))
skriv ut (nästa (siffror))
skriv ut (nästa (siffror))
skriv ut (nästa (siffror))
print ('Generera värden med hjälp av loop-metoden')
för num i mitt_område (1,5):
skriva ut (num)
Ex: Generator för att multiplicera varje nummer (mindre än ett nummer) med ett nummer
def gen_mulby_num (max, num):n = 0
medan n < max:
utbyte n * antal
n + = 1
för jag i gen_mulby_num (5,3):
skriva ut (i)
Ex: Generator för att hitta kub för värden
def gen_mulby_num (max, num):n = 0
medan n < max:
utbyte n * antal
n + = 1
för jag i gen_mulby_num (5,3):
skriva ut (i)
Ex: flera generatorer: hitta kvadraten för jämna nummer som genereras från ett nummer
Generator 1: generera jämna värden från ett givet nummer
Generator 2: generera kvadratnummer från generator1-värden
def gen_even (m):n = 0
medan n < m:
om n% 2 == 0:
utbyte n
n + = 2
def gen_square (nums):
för num in nums:
utbyte 2 * antal
för n i gen_square (gen_even (15)):
skriva ut (n)
Ex: Flera generatorer: skapa fibnacci-serier och lägg till värde 10 varje nummer.
Generator1: genererar FIPS-serie från ett givet nummer
Generator2: lägg till varje nummer med 10 från generator1
def gen_fib (n):x, y = 0, 1
medan x < n:
utbyte x
x, y = y, x + y
def gen_add_10 (nums):
för num in nums:
utbyte 10 + antal
för n i gen_add_10 (gen_fib (5)):
skriva ut (n)
Generatorförståelser:
Generatorförståelser liknar listförståelser där listan använder hakparenteser; detta använder normal parentes.
Ex:
nums = (i för i inom intervallet (10))skriva ut (typ (nums))
skriv ut (lista (nummer))
Skillnad mellan generator och normal funktion:
- En generator tillhandahåller värden med avkastning nyckelord där normal funktion använder lämna tillbaka nyckelord
- Generatorn startar från den plats där den stannade vid anrop nästa gång. Den normala funktionen utför alla uttalanden varje gång.
- Generator sparar minne eftersom det returnerar ett värde åt gången. Så vi kan använda den för att skapa oändliga värden.
Slutsats:
Generator är till stor hjälp när vi hanterar stora / stora data. Vid en viss tidpunkt rymmer den bara en enda bit data snarare än hel data. Generatorkoncept betraktas som ett avancerat koncept inom python.