Python – تکرارگر (Iterator)
Iterator در پایتون شیای است که شامل مقادیر قابل شمارش است و میتوان بر روی آن تکرار انجام داد. در واقع، یک تکرارگر شیای است که پروتکل تکرارگر را پیادهسازی میکند، که شامل دو متد __iter__()
و __next__()
است.
تفاوت بین Iterable و Iterator
Iterable: آبجکتهایی هستند که میتوان از آنها یک تکرارگر ساخت. لیستها، تاپلها، دیکشنریها و مجموعهها نمونههایی از آبجکتهای iterable هستند. این آبجکتها متد iter()
را دارند که برای دریافت تکرارگر استفاده میشود.
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit)) # apple
print(next(myit)) # banana
print(next(myit)) # cherry
Iterator: شیءای است که میتواند به صورت تکرارگر مورد استفاده قرار گیرد و میتوان بر روی آن تکرار کرد. به طور کلی، همه iterableها میتوانند تکرارگر تولید کنند.
mystr = "banana"
myit = iter(mystr)
print(next(myit)) # b
print(next(myit)) # a
print(next(myit)) # n
print(next(myit)) # a
print(next(myit)) # n
print(next(myit)) # a
تکرار بر روی Iterator
میتوان از یک حلقه for
برای تکرار بر روی یک آبجکت iterable استفاده کرد:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
mystr = "banana"
for x in mystr:
print(x)
حلقه for
در واقع یک تکرارگر ایجاد کرده و متد next()
را در هر تکرار اجرا میکند.
ایجاد یک Iterator
برای ایجاد یک کلاس به عنوان تکرارگر، باید متدهای __iter__()
و __next__()
را پیادهسازی کنید:
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)) # 1
print(next(myiter)) # 2
print(next(myiter)) # 3
print(next(myiter)) # 4
print(next(myiter)) # 5
جلوگیری از تکرار بیپایان با StopIteration
برای جلوگیری از تکرار بیپایان، میتوان از خطای StopIteration
استفاده کرد:
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)
در این مثال، تکرارگر پس از ۲۰ تکرار متوقف میشود و خطای StopIteration
پرتاب میشود.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام