تكرارات بايثون
تكرارات بايثون
المكرر هو كائن يحتوي على عدد قابل للعد من القيم.
المكرر هو كائن يمكن التكرار عليه ، مما يعني أنه يمكنك اجتياز جميع القيم.
من الناحية الفنية ، في Python ، المكرر هو كائن يقوم بتنفيذ بروتوكول المكرر ، والذي يتكون من الأساليب __iter__()
و __next__()
.
التكرار مقابل التكرار
القوائم ، المجموعات ، القواميس والمجموعات كلها كائنات قابلة للتكرار. إنها حاويات متكررة يمكنك الحصول على مكرر منها.
كل هذه الكائنات لها iter()
طريقة تُستخدم للحصول على مكرر:
مثال
أعد مكررًا من مجموعة ، واطبع كل قيمة:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
حتى السلاسل هي كائنات قابلة للتكرار ، ويمكنها إرجاع مكرر:
مثال
السلاسل هي أيضًا كائنات قابلة للتكرار ، وتحتوي على سلسلة من الأحرف:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
التكرار من خلال مكرر
يمكننا أيضًا استخدام for
حلقة للتكرار خلال كائن قابل للتكرار:
مثال
كرر قيم tuple:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
مثال
كرر أحرف سلسلة:
mystr = "banana"
for x in mystr:
print(x)
تنشئ for
الحلقة في الواقع كائنًا مكررًا وتنفذ الطريقة () التالية لكل حلقة.
قم بإنشاء مكرر
لإنشاء كائن / فئة كمكرر ، يجب عليك تنفيذ الأساليب
__iter__()
والكائن
__next__()
الخاص بك.
كما تعلمت في فصل Python Classes / Objects ، تحتوي جميع الفئات على وظيفة تسمى
__init__()
، والتي تتيح لك القيام ببعض التهيئة عند إنشاء الكائن.
تعمل __iter__()
الطريقة بشكل مشابه ، يمكنك إجراء عمليات (تهيئة وما إلى ذلك) ، ولكن يجب دائمًا إرجاع كائن المكرر نفسه.
تسمح __next__()
لك الطريقة أيضًا بإجراء عمليات ، ويجب أن تعيد العنصر التالي في التسلسل.
مثال
قم بإنشاء مكرر يقوم بإرجاع الأرقام ، بدءًا من 1 ، وسيزيد كل تسلسل بمقدار واحد (بإرجاع 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))
توقف
سيستمر المثال أعلاه إلى الأبد إذا كان لديك ما يكفي من العبارات التالية () ، أو إذا تم استخدامه في
for
حلقة.
لمنع استمرار التكرار إلى الأبد ، يمكننا استخدام
StopIteration
العبارة.
في __next__()
الطريقة ، يمكننا إضافة شرط إنهاء لإثارة خطأ إذا تم التكرار لعدد محدد من المرات:
مثال
توقف بعد 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)