في بايثون، يعتبر المكرر هو كائن يمكن التكرار عليه، هذا يعني أنه يمكنك اجتياز جميع القيم الموجودة في الكائن، ويتم استخدام التكرارات في كل من حلقات (for و while).
كيفية استخدام التكرارات في بايثون
تُستخدم طريقة (()iter) لإنشاء المكرر فوق الكائن القابل للتكرار، تقوم بإرجاع مكرر للكائن الذي تقدمه له، كما توجد طريقة (()next) وهي ترجع العنصر التالي من المكرر، يمكننا استخدام كلتا الطريقتين للتكرار على متغير، فيما يلي الكود الذي يشرح كيفية استخدام التكرارات في بايثون:
mySecret = [“I”, “Love”, “Python”]
myIter = iter(mySecret)
print(myIter)
print(next(myIter))
print(next(myIter))
print(next(myIter))
وتكون المخرجات كما يلي:
<list_iterator object at 0x00000148B32CE4C0>
I
Love
Python
بمجرد أن نحصل على كائن المكرر، نستخدم (()next) لاجتياز قيمه، بهذه الطريقة، نحصل على جميع القيم الموجودة في مكرر البايثون، إذا حاولنا تشغيل (()next) مرة أخرى، فسنحصل على استثناء (StopIteration):
Traceback (most recent call last):
File “D:\filePath\iterators.py”, line 12, in <module>
print(next(myIter))
StopIteration
كيف تصنع تكرارات مخصصة في بايثون
تمامًا مثل أي شيء آخر في بايثون، فإن إنشاء مكرر مخصص من البداية أمر سهل للغاية، لإنشاء مكرر خاص بنا، يتعين علينا استخدام طريقتين رائعتين توفرهما بايثون:
- طريقة (()__iter__)، يجب أن يعيد كائن المكرر، يمكن إجراء بعض التهيئة، إذا لزم الأمر.
- طريقة (()__next__)، تشبه طريقتي (()next و ()iter))، يجب إرجاع العنصر التالي في التسلسل، عند الوصول إلى النهاية، يجب أن ترفع (StopIteration).
هذا هو الكود الذي يوضح كيفية القيام بذلك:
class ModOfTwo:
def __init__(self, max=0):
self.max = max
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n <= self.max:
result = self.n % 2
self.n += 1
return result
else:
raise StopIteration
# creating an object
numbers = ModOfTwo(3)
# creating an iterator object
i = iter(numbers)
print(next(i))
print(next(i))
print(next(i))
print(next(i))
وتكون المخرجات كما يلي:
0 #0%2
1 #1%2
0 #2%2
1 #3%2