Definiție: Un generator este ca o funcție normală care generează o gamă de valori folosind Randament cuvânt cheie. Returnează câte un obiect la un moment dat. Utilizează intern un iterator. Pentru a accesa elementul următor Următorul() este utilizată funcția sau o putem folosi pentru O buclă. Dacă încercăm să accesăm valoarea în afara intervalului, crește un StopIteration eroare.
Vom vedea câteva exemple pentru a înțelege mai bine
Ex: funcția generator pentru gama de valori
def range_fun (n):x = 0
în timp ce x < n:
randament x
x + = 1
y = range_fun (3)
#call folosind pentru buclă
print („Generați valori folosind metoda next ()”)
pentru i în range_fun (3):
print (i)
#call generator folosind următoarea metodă
print („Generați valori folosind metoda pentru buclă”)
print (next (y))
print (next (y))
print (next (y))
print (next (y)) # Se va ridica excepția Stop Iteration
Ex: Funcția generator pentru seria Fibonacci
def fib_fun (n):x, y = 0, 1
în timp ce x < n:
randament x
x, y = y, x + y
z = fib_fun (6) #generator object
print („Generați valori folosind metoda next ()”)
print (next (z))
print (next (z))
print (next (z))
print (next (z))
print (next (z))
print (next (z))
print („Generați valori folosind metoda pentru buclă”)
pentru i în fib_fun (6):
print (i)
Ex: Funcția generator pentru crearea unei game de valori date cu valori de început și sfârșit.
def my_range (start, end):curent = start
în timp ce curent < end:
curent de randament
curent + = 1
print („Generați valori folosind metoda next ()”)
nums = intervalul_meu (1,5)
print (next (nums))
print (next (nums))
print (next (nums))
print (next (nums))
print („Generați valori folosind metoda pentru buclă”)
pentru num în gama_mei (1,5):
print (num)
Ex: Generator pentru a multiplica fiecare număr (mai puțin decât un număr) cu un număr
def gen_mulby_num (max, num):n = 0
în timp ce n < max:
randament n * num
n + = 1
pentru i în gen_mulby_num (5,3):
print (i)
Ex: Generator pentru a găsi cub pentru gama de valori
def gen_mulby_num (max, num):n = 0
în timp ce n < max:
randament n * num
n + = 1
pentru i în gen_mulby_num (5,3):
print (i)
Ex: generatoare multiple: găsiți pătratul numerelor pare generate dintr-un număr
Generatorul 1: generați valori pare dintr-un număr dat
Generator 2: generați numere pătrate din valorile generator1
def gen_even (m):n = 0
în timp ce n < m:
dacă n% 2 == 0:
randament n
n + = 2
def gen_square (nums):
pentru num in nums:
randament 2 * num
pentru n în gen_square (gen_even (15)):
print (n)
Ex: Generatoare multiple: creați serii Fibnacci și adăugați valoare 10 fiecare număr.
Generator1: generează serii Fibonacci dintr-un număr dat
Generator2: adăugați fiecare număr cu 10 din generator1
def gen_fib (n):x, y = 0, 1
în timp ce x < n:
randament x
x, y = y, x + y
def gen_add_10 (nums):
pentru num in nums:
randament 10 + num
pentru n în gen_add_10 (gen_fib (5)):
print (n)
Înțelegeri ale generatorului:
Înțelegerile generatorului sunt similare cu înțelegerile listei în care lista utilizează paranteze pătrate; aceasta folosește o paranteză normală.
Ex:
nums = (i pentru i în intervalul (10))print (tip (nums))
print (list (nums))
Diferența dintre generator și funcția normală:
- Un generator furnizează valori folosind Randament cuvânt cheie în care funcția normală folosește întoarcere cuvânt cheie
- Generatorul pornește de unde s-a oprit când a fost chemat data viitoare. Funcția normală execută toate instrucțiunile de fiecare dată.
- Generatorul economisește memorie, deoarece returnează o valoare la un moment dat. Așadar, îl putem folosi pentru a genera valori infinite.
Concluzie:
Generatorul este foarte util atunci când manipulăm date imense / mari. La un moment dat, deține o singură bucată de date, mai degrabă decât date întregi. Conceptul de generatoare este considerat un concept avansat în python.