Definicija: Generator je poput normalne funkcije koja generira niz vrijednosti pomoću prinos ključna riječ. Vraća jedan po jedan objekt. Interno koristi iterator. Za pristup sljedećem elementu Sljedeći() koristi se funkcija ili je mi možemo koristiti za petlja. Ako pokušamo pristupiti vrijednosti izvan raspona, ona povisuje a StopIteracija pogreška.
Vidjet ćemo neki primjer za bolje razumijevanje
Primjer: funkcija generatora za raspon vrijednosti
def range_fun (n):x = 0
dok je x < n:
prinos x
x + = 1
y = opseg_zabave (3)
#call pomoću for petlje
print ('Generiraj vrijednosti pomoću metode next ()')
za i u rasponu_zabava (3):
ispis (i)
#call generator pomoću sljedeće metode
print ('Generiraj vrijednosti pomoću metode for loop')
ispis (sljedeći (y))
ispis (sljedeći (y))
ispis (sljedeći (y))
ispis (sljedeći (y)) # Postat će se iznimka Stop Iteration
Pr: Funkcija generatora za Fibonaccijevu seriju
def fib_fun (n):x, y = 0, 1
dok je x < n:
prinos x
x, y = y, x + y
z = fib_fun (6) # objekt generatora
print ('Generiraj vrijednosti pomoću metode next ()')
ispis (sljedeći (z))
ispis (sljedeći (z))
ispis (sljedeći (z))
ispis (sljedeći (z))
ispis (sljedeći (z))
ispis (sljedeći (z))
print ('Generiraj vrijednosti pomoću metode for loop')
za i u fib_fun (6):
ispis (i)
Pr: Funkcija generatora za stvaranje raspona vrijednosti zadanih početnih i krajnjih vrijednosti.
def my_range (početak, kraj):struja = start
dok je trenutna < end:
struja popuštanja
struja + = 1
print ('Generiraj vrijednosti pomoću metode next ()')
nums = moj_opseg (1,5)
ispis (sljedeći (brojevi))
ispis (sljedeći (brojevi))
ispis (sljedeći (brojevi))
ispis (sljedeći (brojevi))
print ('Generiraj vrijednosti pomoću metode for loop')
za num u my_range (1,5):
ispis (broj)
Pr: Generator za množenje svakog broja (manjeg od broja) s brojem
def gen_mulby_num (maks., broj):n = 0
dok je n < max:
prinos n * broj
n + = 1
za i u gen_mulby_num (5,3):
ispis (i)
Pr: Generator za pronalaženje kocke za raspon vrijednosti
def gen_mulby_num (maks., broj):n = 0
dok je n < max:
prinos n * broj
n + = 1
za i u gen_mulby_num (5,3):
ispis (i)
Pr: više generatora: pronaći kvadrat parnih brojeva generiranih od broja
Generator 1: generiranje parnih vrijednosti iz određenog broja
Generator 2: generiranje kvadratnih brojeva iz vrijednosti generator1
def gen_even (m):n = 0
dok je n < m:
ako je n% 2 == 0:
prinos n
n + = 2
def gen_square (brojevi):
za num u nums:
prinos 2 * broj
za n u gen_square (gen_even (15)):
ispis (n)
Pr: Više generatora: stvorite fibnaccijeve serije i dodajte vrijednost 10 svakom broju.
Generator1: generira fibonaccijevu seriju od određenog broja
Generator2: dodajte svaki broj sa 10 iz generator1
def gen_fib (n):x, y = 0, 1
dok je x < n:
prinos x
x, y = y, x + y
def gen_add_10 (brojevi):
za num u nums:
prinos 10 + broj
za n u gen_add_10 (gen_fib (5)):
ispis (n)
Razumijevanja generatora:
Razumijevanja generatora slična su shvaćanjima popisa gdje popis koristi uglate zagrade; ovo koristi normalne zagrade.
Pr:
nums = (i za i u rasponu (10))ispis (vrsta (brojevi))
ispis (popis (brojevi))
Razlika između generatora i normalne funkcije:
- Generator daje vrijednosti pomoću prinos ključna riječ gdje normalna funkcija koristi povratak ključna riječ
- Generator započinje od mjesta gdje se zaustavio kad se sljedeći put pozove. Normalna funkcija svaki put izvršava sve izraze.
- Generator sprema memoriju jer vraća jednu po jednu vrijednost. Tako ga možemo koristiti za generiranje beskonačnih vrijednosti.
Zaključak:
Generator je vrlo koristan kada radimo s velikim / velikim podacima. U određenom trenutku sadrži samo jedan jedini podatak, a ne cijele podatke. Koncept generatora smatra se naprednim konceptom u pythonu.