Skip to content

Iteratoriai

robotautas edited this page Nov 8, 2022 · 2 revisions

Iteratorius - objektas, kurį galima iteruoti. Tai objektas, kuris grąžina duomenis, kas kartą naudojant metodą next().

Iteratorius galima kurti iš bet kokių objektų, kuriuos galime iteruoti su for ciklais, pvz.: string, list, dict ir t.t.

Tarkime žodis "Kėdė" yra objektas iš kurio galime sukurti iteratorių:

iteratorius = iter("Kėdė")
print(type(iteratorius))

# <class 'str_iterator'>

kai tik bus iškviestas iteratoriaus metodas next(), jis grąžins sekantį iteruojamo objekto segmentą, kol nebeliks ko iteruoti ir išmes StopIteration error:

print(next(iteratorius))
print(next(iteratorius))
print(next(iteratorius))
print(next(iteratorius))
print(next(iteratorius))

# K
# ė
# d
# ė
# Traceback (most recent call last):
#   File "/home/blablabla/iterators.py", line 8, in <module>
#     print(next(iteratorius))
# StopIteration

Atkreipkite dėmesį, kaip iteratorius įsimena savo būseną(state), ir žino, kad reikia spausdinti sekantį simbolį. Mūsų nuolat naudojami for ciklai yra sukurti iteratorių pagrindu. Parašykime primityvų for ciklą:

numeriai = [1, 2, 3]

for num in numeriai:
    print(num)
    
# 1
# 2
# 3

O dabar tą pačią iteraciją atlikime be for sintaksės:

iteratorius = iter(numeriai)
while True:
    try:
        print(next(iteratorius))
    except StopIteration:
        break
# 1
# 2
# 3

O dabar parašykime šiek tiek universalesnę funkciją:

def iteruoklis(objektas, func):
    iteratorius = iter(objektas)
    while True:
        try:
            item = next(iteratorius)
        except StopIteration:
            break
        else:
            func(item)

Mūsų funkcija priima objektą (pvz. list'ą ar kt.) iš karto jį paverčia iteratoriumi. Tuomet, kol yra ką iteruoti, iteruoja ir praleidžia per mūsų funkciją argumentuose func. Pvz.:

broliai = ['jurgis', 'antanas', 'aloyzas', 'martynas']
iteruoklis(broliai, print)

# jurgis
# antanas
# aloyzas
# martynas

Šiuo atveju pritaikėme Python integruotą funkciją print, taigi mums bus paprasčiausiai atspausdinti brolių vardai. Galime panaudoti savo sukurtą funkciją, tarkime:

def kubu(x):
    print(x**3)

nums = [1, 2, 3, 4, 5]
iteruoklis(nums, kubu)

# 1
# 8
# 27
# 64
# 125

Dekoratoriai

Iteratoriai ir generatoriai

RegEx

Pillow

Email

NumPy

Pandas

Seaborn

Mašininis mokymasis

Requests, JSON, API

Web Scraping (Beautiful Soup)

Duomenų bazės

Flask

Django

Django REST

Odoo

Linux

Pabaigimo užduotis: savo programos kūrimas

Clone this wiki locally