Python Тоолуур /Iterators/
Iterator буюу Тоолуур гэдэг нь объектод агуулагдаж байгаа тоологдож болох утгуудыг хэлнэ.
Тоолуур нь объектод агуулагдаж байгааг тоолох, дэлгэрүүлбэл багтаж буй шинж чанаруудыг орхилгүй дамжин өнгөрөхийг хэлнэ.
Python-д энэ тоолуурыг __iter__()
, __next__()
гэсэн арга бүхий протоколоор ашигладаг.
Iterator vs Iterable
List
, Tuple
, dictionaries
, болон sets
нь бүгд iterable буюу тоологддог төрлийн объектод агуулагдах бөгөөд тоологдсоны дараагаар Iterable үүснэ.
Iterator-г iter()
арга буюу функцээр ажиллуулна.
Жишээ нь:
Iterator-р tuple -ийн утгыг буцааж, утга тус бүрийг хэвлэж үзье.
tuple1 = ("Төмс", "Лууван", "Байцаа")
iter1 = iter(tuple1)
print (next(iter1))
print (next(iter1))
print (next(iter1))
Үр дүн
C:\Users\Pc Name>iterator.py
Төмс
Лууван
Байцаа
Iterator буюу тоолуур нь String-ийн тэмдэгтийг ч тоолж чадна.
Жишээ нь:
Strings-ийн тэмдэгт бүрийг дарааллаар нь хэвлэж үзье.
str1 = "Төмс"
iter1 = iter(str1)
print (next(iter1))
print (next(iter1))
print (next(iter1))
print (next(iter1))
Үр дүн
C:\Users\Pc Name>iterator.py
Т
ө
м
с
Looping Through an Iterator
Объектын утгыг for
давталт ашиглан тоолж болно.
Жишээ нь:
Tuple-ийн утгыг тоолж үзье
firstTuple = ("Төмс", "Лууван", "Манжин")
for x in firstTuple:
print(x)
Үр дүн
C:\Users\Pc Name>iterator.py
Төмс
Лууван
Манжин
Жишээ нь:
String-ийн тэмдэгтийг ч for
давталтаар тоолж болно.
strChar = "Төмс"
for x in strChar:
print(x)
Үр дүн
C:\Users\Pc Name>iterator.py
Т
ө
м
с
Create an Iterator
__iter__()
болон __next__()
функцийг ашиглан Объектод тоолуурыг давталт хэлбэрээр үүсгэж болно.
Бүх класс __init__()
функцтэй гэдгийн бид бүгд мэднэ.
Тэгвэл__iter__()
функц нь ижил төстэй ажилладаг боловч iterator нь объектыг өөрөө буцаадаг.
Харин __next__()
функц нь үйлдэл хийх боломжийг олгодог бөгөөд дараагийн зүйлийг дарааллаар нь буцаадаг.
Жишээ нь:
1-ээр эхэлсэн тоолуур үүсгээд дуудах бүрд 2-р нэмэгддэг дараалал үүсгэж үзье.
class FirstNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 2
return x
firstClass = FirstNumbers()
firstIter = iter(firstClass)
print (next(firstIter))
print (next(firstIter))
print (next(firstIter))
print (next(firstIter))
print (next(firstIter))
print (next(firstIter))
Үр дүн
C:\Users\Pc Name>iterator.py
1
3
5
7
9
11
StopIteration
Бид дээрх жишээн дээр __next__()
функцийг ашиглан дуудах бүрд хувьсагчийн утгыг 2 нэмээд утга буцааж үзсэн. Тэгвэл энэ удаад for
давталт ашиглах болно.
Iteration нөхцөл биелэхэд тоолуурыг StopIteration
statement-ээр зогсоох болно.
Жишээ нь:
class FirstNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 8:
x = self.a
self.a += 1
return x
else:
raise StopIteration
firstclass = FirstNumbers()
firstiter = iter(firstclass)
for x in firstiter:
print (x)
Үр дүн
C:\Users\Pc Name>iterator.py
1
2
3
4
5
6
7
8
Сэтгэгдэлүүд
