Definícia: Generátor je ako normálna funkcia, ktorá generuje celý rad hodnôt pomocou znaku výnos kľúčové slovo. Vracia po jednom objekte. Vnútorne používa iterátor. Prístup k ďalšiemu prvku Ďalšie() funkcia je použitá, alebo ju môžeme použiť pre slučka. Ak sa pokúsime získať prístup k hodnote mimo rozsahu, zvýši sa a StopIterácia chyba.
Uvidíme nejaký príklad na lepšie pochopenie
Príklad: funkcia generátora pre rozsah hodnôt
def range_fun (n):x = 0
zatiaľ čo x < n:
výnos x
x + = 1
y = range_fun (3)
#call pomocou slučky for
print ('Generovať hodnoty pomocou metódy next ()')
pre i v range_fun (3):
tlač (i)
#call generátor pomocou ďalšej metódy
print ('Generovanie hodnôt pomocou metódy loop')
tlač (ďalšie (y))
tlač (ďalšie (y))
tlač (ďalšie (y))
print (next (y)) # Zobrazí sa výnimka Stop Iteration
Pr: Funkcia generátora pre sériu Fibonacci
def fib_fun (n):x, y = 0, 1
zatiaľ čo x < n:
výnos x
x, y = y, x + y
z = fib_fun (6) #generator object
print ('Generovať hodnoty pomocou metódy next ()')
tlač (ďalšie (z))
tlač (ďalšie (z))
tlač (ďalšie (z))
tlač (ďalšie (z))
tlač (ďalšie (z))
tlač (ďalšie (z))
print ('Generovanie hodnôt pomocou metódy loop')
pre i vo fib_fun (6):
tlač (i)
Pr: Funkcia generátora na vytvorenie rozsahu hodnôt zadaných počiatočných a konečných hodnôt.
def my_range (začiatok, koniec):prúd = štart
zatiaľ čo aktuálne < end:
výťažkový prúd
prúd + = 1
print ('Generovať hodnoty pomocou metódy next ()')
čísla = môj_rozsah (1,5)
tlač (ďalšie (čísla))
tlač (ďalšie (čísla))
tlač (ďalšie (čísla))
tlač (ďalšie (čísla))
print ('Generovanie hodnôt pomocou metódy loop')
pre počet v mojom rozsahu (1,5):
tlač (počet)
Pr: Generátor na vynásobenie každého čísla (menšieho ako číslo) číslom
def gen_mulby_num (max; počet):n = 0
zatiaľ čo n < max:
výnos n * počet
n + = 1
pre i v gen_mulby_num (5,3):
tlač (i)
Pr: Generátor na nájdenie kocky pre rozsah hodnôt
def gen_mulby_num (max; počet):n = 0
zatiaľ čo n < max:
výnos n * počet
n + = 1
pre i v gen_mulby_num (5,3):
tlač (i)
Pr: viac generátorov: vyhľadajte štvorček párnych čísel vygenerovaných z čísla
Generátor 1: generuje párne hodnoty z daného čísla
Generátor 2: vygenerujte štvorcové čísla z hodnôt generátora1
def gen_even (m):n = 0
zatiaľ čo n < m:
ak n% 2 == 0:
výťažok n
n + = 2
def gen_square (čísla):
pre počet v číslach:
výťažok 2 * počet
pre n v gen_square (gen_even (15)):
tlač (n)
Pr: Viac generátorov: vytvorte sériu Fibnacciho a pridajte každému číslu hodnotu 10.
Generátor1: generuje fibonacciho sériu z daného čísla
Generátor2: sčítajte každé číslo z generátora1 o 10
def gen_fib (n):x, y = 0, 1
zatiaľ čo x < n:
výnos x
x, y = y, x + y
def gen_add_10 (čísla):
pre počet v číslach:
výnos 10 + počet
pre n v gen_add_10 (gen_fib (5)):
tlač (n)
Pochopenie generátora:
Pochopenie generátora je podobné ako chápanie zoznamu, kde zoznam používa hranaté zátvorky; používa sa normálna zátvorka.
Pr:
nums = (i pre i v rozsahu (10))tlač (typ (čísla))
tlač (zoznam (čísla))
Rozdiel medzi generátorom a normálnou funkciou:
- Generátor poskytuje hodnoty pomocou výnos kľúčové slovo, kde normálna funkcia používa návrat kľúčové slovo
- Generátor sa spustí od miesta, kde sa zastavil pri ďalšom volaní. Normálna funkcia vykoná všetky príkazy zakaždým.
- Generátor šetrí pamäť, pretože vracia jednu hodnotu po druhej. Môžeme ho teda použiť na generovanie nekonečných hodnôt.
Záver:
Generátor je veľmi užitočný, keď pracujeme s obrovskými / veľkými dátami. V danom čase uchováva iba jeden jediný údaj, a nie celé údaje. Koncept generátorov je považovaný za pokročilý koncept v pythone.