Python iteratorlari
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!
