-
Notifications
You must be signed in to change notification settings - Fork 84
Generatoriai
- Generatoriai yra iteratorių rūšis. Jie yra paprastesnis būdas kurti iteratorius;
- Generatoriai kuriami naudojant generatorių funkcijas;
- Generatorių funkcijų ypatumas yra tas, kad vietoje return naudojame yield;
skirtumai tarp paprastų ir generatoriaus funkcijų (generator functions):
Funkcija | Generatoriaus funkcija |
---|---|
naudoja return | naudoja yield |
grąžina rezultatą 1 kartą | gali grąžinti rezultatus daug kartų |
grąžina return vertę | grąžina generatorių |
Pvz.:
def skaiciuojam_iki(iki):
count = 1
while count <= iki:
yield count
count +=1
čia yra generatoriaus funkcija. Iš jos galime susikurti generatorių ir analogiškai, kaip ir su kitais iteratoriais, galime iškvieti funkciją next:
counter = skaiciuojam_iki(5)
print(next(counter))
print(next(counter))
print(next(counter))
print(next(counter))
print(next(counter))
print(next(counter))
# 1
# 2
# 3
# 4
# 5
# Traceback (most recent call last):
# File "/home/blablabla/uzduotys.py", line 11, in <module>
# print(next(counter))
# StopIteration
Kaip matome, veiksmas vyksta vienodai, kaip ir su iteratoriais, nes generatorius ir yra iteratorius.
Beje, generatorius galima paversti į list'us:
sarasas = list(counter)
print(sarasas)
# [1, 2, 3]
Ir juos iteruoti su paprastais for ciklais:
for i in counter:
print(i)
# 1
# 2
# 3
o dabar padidinkime iki reikšmę iki 10 ir atlikim eksperimentą:
counter = skaiciuojam_iki(10)
print(next(counter))
print(next(counter))
print(next(counter))
sarasas = list(counter)
print(sarasas)
# 1
# 2
# 3
# [4, 5, 6, 7, 8, 9, 10]
šis pavyzdys iliustruoja, kaip veikia generatoriai - jie nekaupia viso turinio atmintyje, o tik įsidėmi momentinę reikšmę, kurios pagrindu generuoja sekančią. 1, 2, 3 reikšmės buvo panaudotos ir išmestos, o sąrašas suformuotas tik iš to, kas liko. Dėl to generatoriai veikia gerokai sparčiau už įprastus for loops.
Yra dar vienas metodas generatoriams kurti - generator expressions. Pamenate list comprehension?:) Tai yra analogiškas sintaksinis palengvinimas kurti generatoriams. Pvz.:
g = (num**2 for num in range(1, 50))
print(type(g))
print(next(g))
print(next(g))
print(next(g))
# ir t.t.
# <class 'generator'>
# 1
# 4
# 9
© Donatas Noreika ir Jotautas Treigys
Dekoratoriai
Iteratoriai ir generatoriai
RegEx
Pillow
NumPy
Pandas
- Pandas I
- Užduotys I
- Atsakymai I
- Pandas II
- Užduotys II
- Atsakymai II
- Pandas III
- Užduotys III
- Atsakymai III
Seaborn
Mašininis mokymasis
- 1 Tiesinės regresijos modelis
- 1 Užduotis
- 1 Atsakymas
- 2 Modeliai - klasifikatoriai
- 2 Užduotis
- 2 Atsakymas
- 3 Modeliai praktikoje
- 3 Užduotis (atnaujinta), atsakymas
- 3 Užduotis
- 3 Atsakymas (kodas su komentarais)
Requests, JSON, API
Web Scraping (Beautiful Soup)
Duomenų bazės
- SQL 1
- Užduotys
- Atsakymai
- SQL 2
- Užduotys
- Atsakymai
- SQL 3
- Užduotys
- Atsakymai
- SQL 4
- Užduotis
- SQL per Python
- Užduotis
- ORM 1
- Užduotys
- ORM 2
- Užduotis
- Atsakymas
Flask
- Įžanga
- Užduotys
- I dalis
- Užduotis
- I dalies kodas (atsakymas)
- II dalis
- Užduotis
- Atsakymas (kodas)
- III dalis
- Užduotis
- Atsakymas
- IV dalis
- Užduotis
- Atsakymas
- Flask Many2one, CRUD
- Flask One2many, many2many CRUD
- Flask: REST API kūrimas
- Flask: API su One2many (kodas)
- Flask: vartotojai
- Flask: nuotraukos pridėjimas, admin puslapis, puslapiavimas
- Flask: password reset, error pages
- Flask: projekto sutvarkymas
- Flask diegimas į serverį
Django
- 1. Įžanga, Modeliai
- 2. Administratoriaus svetainė
- 3. Šablonai
- 4. Views
- 5. Puslapiavimas, Paieška, Nuotraukos
- 6. Autorizacija
- 7. Vartotojai II, HTML laukai
- 8. Registracija, Formos
- 9. Vartotojo profilis
- 10. Create, Update, Delete rodinių klasės
- 11. Vertimai
- Užduotis: Autoservisas
- Biblioteka: kodas iki 6-tos dalies
- Biblioteka: kodas nuo 6-tos dalies
- Django diegimas į serverį
- Django diegimas į serverį 2
Django REST
Odoo
- Kurso programa: projektų valdymas
- 1 pamoka
- 2 pamoka
- 3 pamoka
- 4 pamoka
- 5 pamoka
- 6 pamoka
- 7 pamoka
- 8 pamoka
- 9 pamoka
Linux