Meghatározás: A generátor olyan, mint egy normál függvény, amely értéktartományt állít elő a hozam kulcsszó. Egyszerre egy objektumot ad vissza. Belsőleg iterátort használ. A következő elem elérése következő() függvényt használjuk, vagy használhatjuk mert egy hurok. Ha megpróbálunk elérni a tartományon kívüli értéket, akkor felveti a StopIteration hiba.
Látunk néhány példát a jobb megértéshez
Volt: generátor funkció az értéktartományhoz
def range_fun (n):x = 0
míg x < n:
hozam x
x + = 1
y = hatótávolság (3)
#call for loop használatára
print ('Értékek előállítása a következő () módszerrel')
i-re a tartomány_teljesítményben (3):
nyomtatás (i)
#call generátor a következő módszerrel
print ('Értékek előállítása a ciklus módszerével')
nyomtatás (következő (y))
nyomtatás (következő (y))
nyomtatás (következő (y))
nyomtatás (következő (y)) # Megáll az Iteráció leállítása kivétel
Volt: Generátor funkció a Fibonacci sorozathoz
def fib_fun (n):x, y = 0, 1
míg x < n:
hozam x
x, y = y, x + y
z = fib_fun (6) #generator objektum
print ('Értékek előállítása a következő () módszerrel')
nyomtatás (következő (z))
nyomtatás (következő (z))
nyomtatás (következő (z))
nyomtatás (következő (z))
nyomtatás (következő (z))
nyomtatás (következő (z))
print ('Értékek előállítása a ciklus módszerével')
i-re a fib_fun (6) -ben:
nyomtatás (i)
Volt: Generátor funkció az adott kezdő és végérték értéktartományának létrehozásához.
def saját_tartomány (kezdet, vég):áram = kezdet
míg a jelenlegi < end:
hozamáram
áram + = 1
print ('Értékek előállítása a következő () módszerrel')
nums = saját tartomány (1,5)
nyomtatás (következő (számok))
nyomtatás (következő (számok))
nyomtatás (következő (számok))
nyomtatás (következő (számok))
print ('Értékek előállítása a ciklus módszerével')
számra a saját tartományomban (1,5):
nyomtatás (szám)
Volt: Generátor, hogy minden számot (kevesebb, mint egy számot) megszorozzon egy számmal
def gen_mulby_num (max, szám):n = 0
míg n < max:
hozam n * szám
n + = 1
i-re a gen_mulby_num (5,3) -ban:
nyomtatás (i)
Volt: Generátor az értéktartomány kocka megtalálásához
def gen_mulby_num (max, szám):n = 0
míg n < max:
hozam n * szám
n + = 1
i-re a gen_mulby_num (5,3) -ban:
nyomtatás (i)
Volt: több generátor: keresse meg a számból generált páros számok négyzetét
1. generátor: páros értékeket generál egy adott számból
2. generátor: generál négyzetszámokat a generator1 értékekből
def gen_even (m):n = 0
míg n < m:
ha n% 2 == 0:
hozam n
n + = 2
def gen_square (számok):
a szám számokban:
hozam 2 * sz
n-re a gen_square-ben (gen_even (15)):
nyomtatás (n)
Volt: Több generátor: hozzon létre fibnacci sorozatokat, és adjon hozzá 10 értéket minden számhoz.
Generator1: adott számból generál fibonacci sorozatokat
Generátor2: adjon hozzá minden számot 10-gyel az 1. generátorból
def gen_fib (n):x, y = 0, 1
míg x < n:
hozam x
x, y = y, x + y
def gen_add_10 (számok):
a szám számokban:
hozam 10 + szám
n esetén gen_add_10 (gen_fib (5)):
nyomtatás (n)
Generátor megértése:
A generátor megértése hasonló a lista megértéséhez, ahol a lista szögletes zárójelet használ; ez normál zárójeleket használ.
Volt:
nums = (i az i-re a (10) tartományban)nyomtatás (típus (összegek))
nyomtatás (lista (számok))
A generátor és a normál működés közötti különbség:
- Egy generátor értékeket ad meg hozam kulcsszó, ahol a normál függvény a Visszatérés kulcsszó
- A generátor onnan indul, ahol leállt, amikor legközelebb hívták. A normál függvény minden utasítást minden alkalommal végrehajt.
- A Generator memóriát takarít meg, mivel egyszerre egy értéket ad vissza. Tehát végtelen értékek előállítására használhatjuk fel.
Következtetés:
A Generator nagyon hasznos, ha hatalmas / nagy adatokat kezelünk. Adott időpontban csak egyetlen adatot tartalmaz, nem pedig teljes adatot. A generátorok koncepciója a Python fejlett koncepciójának számít.