كيفية صناعة كائن قابل للتكرار iterator في بايثون

اقرأ في هذا المقال


في بايثون، يعتبر المكرر هو كائن يمكن التكرار عليه، هذا يعني أنه يمكنك اجتياز جميع القيم الموجودة في الكائن، ويتم استخدام التكرارات في كل من حلقات (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

المصدر: JavaScript: The Good Parts, Douglas Crockford, 2008 edition.JavaScript: The Definitive Guide, David Flanagan, 2011 edition.PROFESSIONAL JAVASCRIPT: FOR WEB DEVELOPERS, Nicholas C. Zakas,2012 edition.JavaScript, Stephen Blumenthal, 2017 edition.


شارك المقالة: