Definice: Generátor je jako normální funkce, která generuje řadu hodnot pomocí výtěžek klíčové slovo. Vrací jeden objekt najednou. Interně používá iterátor. Pro přístup k dalšímu prvku další() funkce je použita, nebo ji můžeme použít pro smyčka. Pokud se pokusíme získat přístup k hodnotě mimo rozsah, vyvolá to a StopIterace chyba.
Uvidíme nějaký příklad, abychom lépe porozuměli
Příklad: funkce generátoru pro rozsah hodnot
def range_fun (n):x = 0
zatímco x < n:
výnos x
x + = 1
y = range_fun (3)
#call pomocí smyčky for
print ('Generovat hodnoty pomocí metody next ()')
pro i v range_fun (3):
tisk (i)
#call generátor pomocí další metody
print ('Generovat hodnoty pomocí metody pro smyčku')
tisk (další (y))
tisk (další (y))
tisk (další (y))
print (next (y)) # Stop Iterační výjimka bude vyvolána
Př: Funkce generátoru pro řadu Fibonacci
def fib_fun (n):x, y = 0, 1
zatímco x < n:
výnos x
x, y = y, x + y
z = fib_fun (6) #generator object
print ('Generovat hodnoty pomocí metody next ()')
tisk (další (z))
tisk (další (z))
tisk (další (z))
tisk (další (z))
tisk (další (z))
tisk (další (z))
print ('Generovat hodnoty pomocí metody pro smyčku')
pro i in fib_fun (6):
tisk (i)
Př: Funkce generátoru pro vytváření rozsahu hodnot zadaných počátečních a koncových hodnot.
def my_range (začátek, konec):proud = start
zatímco aktuální < end:
výtěžný proud
aktuální + = 1
print ('Generovat hodnoty pomocí metody next ()')
nums = my_range (1,5)
tisk (další (čísla))
tisk (další (čísla))
tisk (další (čísla))
tisk (další (čísla))
print ('Generovat hodnoty pomocí metody pro smyčku')
pro num in my_range (1,5):
tisk (počet)
Př: Generátor pro vynásobení každého čísla (menšího než číslo) číslem
def gen_mulby_num (max, num):n = 0
zatímco n < max:
výtěžek n * num
n + = 1
pro i v gen_mulby_num (5,3):
tisk (i)
Př: Generátor pro vyhledání krychle pro rozsah hodnot
def gen_mulby_num (max, num):n = 0
zatímco n < max:
výtěžek n * num
n + = 1
pro i v gen_mulby_num (5,3):
tisk (i)
Př: více generátorů: najděte druhou mocninu sudých čísel vygenerovaných z čísla
Generátor 1: generuje sudé hodnoty z daného čísla
Generátor 2: vygenerujte čtvercová čísla z hodnot generátoru1
def gen_even (m):n = 0
zatímco n < m:
pokud n% 2 == 0:
výtěžek č
n + = 2
def gen_square (čísla):
pro číslo v číslech:
výtěžek 2 * počet
pro n in gen_square (gen_even (15)):
tisk (n)
Př: Více generátorů: vytvořte řadu Fibnacci a přidejte hodnotu 10 každému číslu.
Generátor1: generuje řadu fibonacci z daného čísla
Generátor2: přidejte každé číslo o 10 z generátoru1
def gen_fib (n):x, y = 0, 1
zatímco x < n:
výnos x
x, y = y, x + y
def gen_add_10 (čísla):
pro číslo v číslech:
výnos 10 + počet
pro n v gen_add_10 (gen_fib (5)):
tisk (n)
Pochopení generátoru:
Pochopení generátoru jsou podobná porozumění seznamu, kde seznam používá hranaté závorky; používá se normální závorka.
Př:
nums = (i pro i v rozsahu (10))tisk (typ (čísla))
tisk (seznam (čísla))
Rozdíl mezi generátorem a normální funkcí:
- Generátor poskytuje hodnoty pomocí výtěžek klíčové slovo, kde normální funkce používá vrátit se klíčové slovo
- Generátor začíná od místa, kde se zastavil při příštím volání. Normální funkce provede všechny příkazy pokaždé.
- Generátor šetří paměť, protože vrací jednu hodnotu po druhé. Můžeme jej tedy použít ke generování nekonečných hodnot.
Závěr:
Generátor je velmi užitečný, když zpracováváme velká / velká data. V danou dobu uchovává pouze jednu jedinou část dat, nikoli celá data. Koncept generátorů je v pythonu považován za pokročilý koncept.