Skip to content

Python - Iteratorlar ​

Python Iteratorlari ​

Iterator - bu sanoqli miqdordagi qiymatlarni o'z ichiga olgan obyektdir.

Iterator - bu aylanib chiqiladigan obyekt bo'lib, ya'ni siz uning barcha qiymatlari bo'ylab o'tishingiz mumkin.

Texnik jihatdan, Python'da iterator __iter__() va __next__() metodlaridan iborat bo'lgan iterator protokolini amalga oshiradigan obyektdir.

Iterator va Aylantiriladigan obyektlar ​

Ro'yxatlar, tuplelar, lug'atlar va setlar hammasi aylantiriladigan obyektlardir. Ular iterator olishingiz mumkin bo'lgan aylantiriladigan konteynerlardir.

Bu obyektlarning hammasida iterator olish uchun ishlatiladigan iter() metodi mavjud:

Misol ​

Tuple'dan iterator qaytaring va har bir qiymatni chop eting:

python
mening_tuplem = ("olma", "banan", "gilos")
mening_iteratorim = iter(mening_tuplem)

print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))

Hatto satrlar ham aylantiriladigan obyektlar bo'lib, iterator qaytara oladi:

Misol ​

Satrlar ham aylantiriladigan obyektlar bo'lib, belgilar ketma-ketligini o'z ichiga oladi:

python
mening_satim = "banan"
mening_iteratorim = iter(mening_satim)

print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))

Iterator Bo'ylab Aylanish ​

Aylantiriladigan obyekt bo'ylab aylanish uchun for tsiklidan ham foydalanishimiz mumkin:

Misol ​

Tuple qiymatlarini aylanib chiqish:

python
mening_tuplem = ("olma", "banan", "gilos")

for x in mening_tuplem:
    print(x)

Misol ​

Satr belgilarini aylanib chiqish:

python
mening_satim = "banan"

for x in mening_satim:
    print(x)

for tsikli aslida iterator obyektini yaratadi va har bir tsikl uchun next() metodini bajaradi.

Iterator Yaratish ​

obyekt/sinfni iterator sifatida yaratish uchun obyektingizga __iter__() va __next__() metodlarini qo'shishingiz kerak.

Python Sinflar/obyektlar bo'limida o'rganganingizdek, barcha sinflarda obyekt yaratilganda ba'zi boshlang'ich sozlamalarni amalga oshirishga imkon beruvchi __init__() funksiyasi mavjud.

__iter__() metodi shunga o'xshash ishlaydi, siz operatsiyalar (boshlash va h.k.) qilishingiz mumkin, lekin har doim iterator obyektining o'zini qaytarishi kerak.

__next__() metodi ham operatsiyalar qilishga imkon beradi va ketma-ketlikdagi keyingi elementni qaytarishi kerak.

Misol ​

1 dan boshlanadigan va har bir ketma-ketlik birga oshib boradigan (1, 2, 3, 4, 5 va h.k.) raqamlarni qaytaradigan iterator yarating:

python
class MeningRaqamlarim:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x

mening_sinfim = MeningRaqamlarim()
mening_iteratorim = iter(mening_sinfim)

print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))
print(next(mening_iteratorim))

StopIteration ​

Yuqoridagi misol agar sizda yetarlicha next() iboralari bo'lsa yoki u for tsiklida ishlatilsa, abadiy davom etadi.

Aylanishning abadiy davom etishini oldini olish uchun StopIteration iborasidan foydalanishimiz mumkin.

__next__() metodida, agar aylanish belgilangan miqdorda bajarilgan bo'lsa, xatolik chiqarish uchun tugatish shartini qo'shishimiz mumkin:

Misol ​

20 ta iteratsiyadan keyin to'xtash:

python
class MeningRaqamlarim:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        if self.a <= 20:
            x = self.a
            self.a += 1
            return x
        else:
            raise StopIteration

mening_sinfim = MeningRaqamlarim()
mening_iteratorim = iter(mening_sinfim)

for x in mening_iteratorim:
    print(x)

Python Iteratorlar (Takrorlovchilar) mavzusida test

Savol 1 / 7

Python dasturlash tilida Obyekt rasman Iterator (Iterator protocol) bo'lishi uchun qaysi ikkita metodni o'zida amalga oshirgan bo'lishi kerak?