Python Iterators – Python Итераторууд #
An iterator is an object that contains a countable number of values.
Итератор гэдэг нь тооцоолох боломжтой олон утгуудыг агуулсан объект юм.
An iterator is an object that can be iterated upon, meaning that you can traverse through all the values.
Итератор гэдэг нь тодорхой утгуудаар дамжин өнгөрөх боломжтой объект бөгөөд энэ нь бүх утгуудыг гүйцэтгэж дуусдаг.
Technically, in Python, an iterator is an object which implements the iterator protocol, which consist of the methods
__iter__()
and__next__()
.Техникийн хувьд, Python-д итератор нь тоолуур протоколыг хэрэгжүүлдэг объект юм. Энэ нь
__iter__()
болон__next__()
гэсэн аргуудыг агуулдаг.
Iterator vs Iterable – Итератор болон Итераци хийж болдог объектууд #
Lists, tuples, dictionaries, and sets are all iterable objects. They are iterable containers which you can get an iterator from.
list, tuple, dictionary, set гэх мэт нь давтагдах боломжтой объектууд юм. Эдгээр нь давталттай контейнерүүд бөгөөд эдгээрээс та тоолуураар авч болно.
All these objects have a iter()
method which is used to get an iterator:
Эдгээр объектууд нь тоолуур үүсгэхэд ашиглагддаг iter()
гэдэг аргатай:
Example – Жишээ #
Return an iterator from a tuple, and print each value:
Тuple-д тоолуур үүсгэн, утгуудыг хэвлэх:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Even strings are iterable objects, and can return an iterator:
Мөн тэмдэгтүүд нь давталт хийж болох объектууд юм:
Example – Жишээ #
Strings are also iterable objects, containing a sequence of characters:
Тэмдэгт мөрүүд бас давтагдах боломжтой объектууд, тэмдэгт мөрүүдийг тэмдэгтийн дарааллаар үүсгэх:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Looping Through an Iterator – Тоолуур дээр давталт хийх #
We can also use a for
loop to iterate through an iterable object:
Мөн давтах боломжтой объектуудаар давталт хийхийн тулд for
давталтыг ашиглаж болно:
Example – Жишээ #
Iterate the values of a tuple:
Тuple-ийн утгуудаар давталт хийх:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
Example – Жишээ #
Iterate the characters of a string:
Тэмдэгт мөрүүдийн тэмдэгтүүдээр давталт хийх:
mystr = "banana"
for x in mystr:
print(x)
The for
loop actually creates an iterator object and executes the next() method for each loop.
for
давталт нь тоолуур объект үүсгэн, next()
аргыг давталт бүрт гүйцэтгэдэг.
Create an Iterator – Тоолуур үүсгэх #
To create an object/class as an iterator you have to implement the methods __iter__()
and __next__()
to your object.
Объект/классыг тоолууртай болгохын тулд __iter__()
болон __next__()
аргуудыг хэрэгжүүлэх хэрэгтэй.
As you have learned in the Python Classes/Objects chapter, all classes have a function called __init__()
, which allows you to do some initializing when the object is being created.
Python-ын Класс/Объектын бүлэгт үзсэнчлэн бүх классуудад __init__()
нэртэй функц байдаг бөгөөд энэ нь объект үүсгэгдэх үед зарим эхлүүлэлтийг хийх боломжийг олгодог.
The __iter__()
method acts similar, you can do operations (initializing etc.), but must always return the iterator object itself.
__iter__()
арга нь үүнтэй төстэй үйлдлийг хийж болох ба (эхлүүлэлт гэх мэт), үргэлж тоолуур объектыг өөрөө буцаах ёстой.
The __next__()
method also allows you to do operations, and must return the next item in the sequence.
__next__()
арга нь мөн үйлдлүүдийг гүйцэтгэх боломжийг олгодог бөгөөд дарааллын дараагийн элементийг буцаах ёстой.
Example – Жишээ #
Create an iterator that returns numbers, starting with 1, and each sequence will increase by one (returning 1,2,3,4,5 etc.):
1, 2, 3, 4, 5 гэх мэтээр дарааллаар нэмэгддэг тоонуудыг буцаадаг тоолуур үүсгэх:
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))
StopIteration #
The example above would continue forever if you had enough next() statements, or if it was used in a for
loop.
Итерацийг үргэлжлэхгүй байлгахын тулд StopIteration
хэллэгийг ашиглаж болно, эсвэл for
давталт ашиглаж байвал.
To prevent the iteration from going on forever, we can use the StopIteration
statement.
Итерацийг хязгааргүй үргэлжлэхээс сэргийлэхийн тулд StopIteration
операторыг ашиглаж болно.
In the __next__()
method, we can add a terminating condition to raise an error if the iteration is done a specified number of times:
__next__()
арга нь итерац тодорхойлсон тоонд хүрсэн үед алдаанаас өмнө зогсох нөхцөлийг нэмж болно.
Example – Жишээ
Stop after 20 iterations:
20 итерацийн дараа зогсоох:
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)