Python iteratorlari


ULASHISH

Python iteratorlari

Iterator - bu sanab bo‘ladigan qiymatlarni o‘z ichiga olgan obyekt.

Iterator - bu takrorlanadigan obyekt, ya’ni siz barcha qiymatlar bo‘ylab o‘tishingiz mumkin.

Texnik jihatdan Pythonda iterator __iter__() va __next__() usullaridan iborat iterator protokolini amalga oshiradigan obyektdir.


Iterator va takrorlanuvchi

Listlar, kortejlar, dictionarylar va setlar takrorlanadigan obyektlardir. Ular iteratorni olishingiz mumkin bo‘lgan takrorlanadigan konteynerlardir.

Ushbu obyektlarning barchasi iteratorni olish uchun ishlatiladigan iter() usuliga ega:

Misol

Kortejdan iteratorni qaytaring va har bir qiymatni chop eting:

mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
O‘zingiz sinab ko‘ring »

Hatto stringlar ham takrorlanadigan obyektlardir va iteratorni qaytarishi mumkin:

Misol

Stringlar, shuningdek, belgilar ketma-ketligini o‘z ichiga olgan takrorlanadigan obyektlardir:

mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
O‘zingiz sinab ko‘ring »

Iterator orqali aylanish

Biz takrorlanadigan obyektni takrorlash uchunforsiklidan ham foydalanishimiz mumkin:

Misol

Kortej qiymatlarini takrorlang:

mytuple = ("apple", "banana", "cherry") for x in mytuple:   print(x)
O‘zingiz sinab ko‘ring »

Misol

String belgilarini takrorlang:

mystr = "banana" for x in mystr:   print(x)
O‘zingiz sinab ko‘ring »

forsikli aslida iterator obyektini yaratadi va har bir sikldanext()usuliniforbajaradi.



Iterator yarating

Obyektni/classni iterator sifatida yaratish uchun obyektingizga __iter__() va __next__() usullarini qo‘llashingiz kerak.

Python sinflari/obyektlari bo‘limida bilib olganingizdek, barcha classlar __init__() deb nomlangan funksiyaga ega bo‘lib, bu sizga obyekt yaratilayotganda biroz ishga tushirishni amalga oshirish imkonini beradi.

__iter__() usuli xuddi shunday ishlaydi, siz operatsiyalarni bajarishingiz mumkin (boshlash va h.k.), lekin har doim iterator obyektining o‘zini qaytarishingiz kerak.

__next__() usuli ham operatsiyalarni bajarishga imkon beradi va keyingi elementni ketma-ketlikda qaytarishi kerak.

Misol

1 dan boshlab raqamlarni qaytaruvchi iterator yarating va har bir ketma-ketlik bittaga ko‘payadi (qaytaruvchi 1,2,3,4,5 va hokazo):

class MyNumbers:   def __iter__(self):     self.a = 1     return self   def __next__(self):     x = self.a     self.a += 1     return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
O‘zingiz sinab ko‘ring »

Iteratsiyani to‘xtatish

Yuqoridagi misol, agar sizda yetarlicha next() iboralari bo‘lsa yoki uforsiklida ishlatilgan bo‘lsa, abadiy davom etadi.

Takrorlashning abadiy davom etishiga yo‘l qo‘ymaslik uchun biz StopIteration operatoridan foydalanishimiz mumkin.

__next__() usulida, agar takrorlash ma’lum bir necha marta bajarilsa, xatoni ko‘tarish uchun tugatish shartini qo‘shishimiz mumkin:

Misol

Stop after 20 iterations:

class MyNumbers:   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 myclass = MyNumbers() myiter = iter(myclass) for x in myiter:   print(x)
O‘zingiz sinab ko‘ring »


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!