Definīcija: Ģenerators ir kā parasta funkcija, kas ģenerē vērtību diapazonu, izmantojot raža atslēgvārds. Tas atgriež vienu objektu vienlaikus. Tas iekšēji izmanto iteratoru. Lai piekļūtu nākamajam elementam Nākamais() vai arī mēs varam to izmantot priekš cilpa. Ja mēs mēģinām piekļūt vērtībai ārpus diapazona, tā paaugstina a StopIteration kļūda.
Mēs redzēsim dažus piemērus, lai labāk saprastu
Piem .: ģeneratora funkcija vērtību diapazonam
def range_fun (n):x = 0
kamēr x < n:
raža x
x + = 1
y = diapazona prieks (3)
#call using for loop
drukāt ('Ģenerēt vērtības, izmantojot metodi Next ()')
i i diapazonā_jautrināt (3):
drukāt (i)
# zvanu ģenerators, izmantojot nākamo metodi
drukāt ('Veidot vērtības, izmantojot cilpa metodi')
drukāt (nākamais (y))
drukāt (nākamais (y))
drukāt (nākamais (y))
izdrukāt (nākamais (y)) # Tiks izcelts Stop Iteration izņēmums
Piem: Ģeneratora funkcija Fibonači sērijām
def fib_fun (n):x, y = 0, 1
kamēr x < n:
raža x
x, y = y, x + y
z = fib_fun (6) # ģeneratora objekts
drukāt ('Ģenerēt vērtības, izmantojot metodi Next ()')
drukāt (nākamais (z))
drukāt (nākamais (z))
drukāt (nākamais (z))
drukāt (nākamais (z))
drukāt (nākamais (z))
drukāt (nākamais (z))
drukāt ('Veidot vērtības, izmantojot cilpa metodi')
i i fib_fun (6):
drukāt (i)
Piem: Ģeneratora funkcija vērtību diapazona izveidošanai, ņemot vērā sākuma un beigu vērtības.
def my_range (sākums, beigas):strāva = sākums
kamēr pašreizējais < end:
ienesīguma strāva
strāva + = 1
drukāt ('Ģenerēt vērtības, izmantojot metodi Next ()')
nums = mans diapazons (1,5)
drukāt (nākamais (skaitļi))
drukāt (nākamais (skaitļi))
drukāt (nākamais (skaitļi))
drukāt (nākamais (skaitļi))
drukāt ('Veidot vērtības, izmantojot cilpa metodi')
skaitlim manā diapazonā (1,5):
drukāt (num)
Piem: Ģenerators, lai katru skaitli (mazāku par skaitli) reizinātu ar skaitli
def gen_mulby_num (max, skaits):n = 0
kamēr n < max:
raža n * num
n + = 1
priekš i gen_mulby_num (5,3):
drukāt (i)
Piem: Ģenerators, lai atrastu vērtību diapazona kubu
def gen_mulby_num (max, skaits):n = 0
kamēr n < max:
raža n * num
n + = 1
priekš i gen_mulby_num (5,3):
drukāt (i)
Piem: vairāki ģeneratori: atrodiet skaitļa ģenerēto pāra skaitļu kvadrātu
1. ģenerators: no noteiktā skaitļa ģenerē pāra vērtības
2. ģenerators: ģenerē kvadrātu skaitļus no generator1 vērtībām
def gen_even (m):n = 0
kamēr n < m:
ja n% 2 == 0:
raža n
n + = 2
def gen_square (skaitļi):
skaitlim skaitļos:
raža 2 * num
attiecībā uz n gen_square (gen_even (15)):
izdruka (n)
Piem: Vairāki ģeneratori: izveidojiet fibnači sērijas un katram skaitlim pievienojiet vērtību 10.
Generator1: ģenerē fibonacci sērijas no noteikta skaitļa
Ģenerators2: pievienojiet katru skaitli pa 10 no ģeneratora1
def gen_fib (n):x, y = 0, 1
kamēr x < n:
raža x
x, y = y, x + y
def gen_add_10 (skaitļi):
skaitlim skaitļos:
raža 10 + num
attiecībā uz n gen_add_10 (gen_fib (5)):
izdruka (n)
Izpratne par ģeneratoru:
Ģeneratora izpratne ir līdzīga saraksta izpratnei, kur sarakstā tiek izmantotas kvadrātiekavas; šajā gadījumā tiek izmantotas parastās iekavas.
Piem:
nums = (i pret i diapazonā (10))drukāt (tips (skaitļi))
drukāt (saraksts (summas))
Atšķirība starp ģeneratoru un normālu darbību:
- Ģenerators sniedz vērtības, izmantojot raža atslēgvārds, kurā parastā funkcija izmanto atgriešanās atslēgvārds
- Ģenerators sākas no vietas, kur apstājās, kad nākamreiz tiek izsaukts. Normālā funkcija katru reizi izpilda visus paziņojumus.
- Ģenerators ietaupa atmiņu, jo tā vienlaikus atdod vienu vērtību. Tāpēc mēs to varam izmantot, lai ģenerētu bezgalīgas vērtības.
Secinājums:
Ģenerators ir ļoti noderīgs, ja mēs apstrādājam milzīgus / lielus datus. Noteiktā laikā tajā ir tikai viens vienīgs, nevis veseli dati. Ģeneratoru koncepcija tiek uzskatīta par uzlabotu jēdzienu pitonā.