آموزش تکرارگر یا iterator در پایتون

شی تکرارگر و شی قابل‌تکرار در پایتون

تکرارگر یک شی است که دارای تعداد قابل شمارشی از مقادیر می‌باشد.

می توان بر روی یک تکرارگر حلقه زد و تمام مقادیر آن را به دست آورد.

در پایتون، یک شی زمانی تکرارگر محسوب می‌شود که پروتکل مخصوص آن، شامل متدهای __iter__() و __next__() را پیاده سازی کند.

تفاوت تکرارگر (Iterator) و قابل‌تکرار (Iterable)

لیست‌ها، تاپل‌ها، دیکشنری‌ها و ست‌ها همگی اشیاء قابل‌تکرار هستند. یعنی می‌توانید یک تکرارگر از آنها دریافت کنید.

همه این اشیاء دارای متد 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 روی یک تکرارگر استفاده کنیم:

مثال

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
  print(x)

مثال

کاراکترهای یک رشته:

mystr = "banana"

for x in mystr:
  print(x)

حلقه for در واقع یک تکرارگر ایجاد می کند و متد ()next را برای هر آیتم حلقه فرا می‌خواند.

یک تکرارگر بسازید

برای ایجاد یک شی/کلاس به عنوان تکرارگر، باید متدهای __iter__() و __next__()را در این کلاس پیاده سازی کنید.

در متد __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))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

توقف تکرار

در مثال بالا اگر از یک حلقه استفاده کنید، تا بی‌نهایت ادامه خواهد داشت.

برای جلوگیری از ادامه تکرار، می توانیم از خطای StopIteration استفاده کنیم.

در داخل متد __next__()، می‌توانیم یک شرط پایان‌دهنده اضافه کنیم و درصورت برقرار شدن این شرط، خطای StopIteration را ایجاد کنیم.

مثال

توقف پس از 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)
مجموعهآموزش پایتون از صفر(23 پست)
1.پایتون چیست؟ مقدمه پایتون10 ماه قبل2.برنامه نویسی پایتون را چطور شروع کنیم؟10 ماه قبل3.آموزش سینتکس (نحوه نوشتن) پایتون10 ماه قبل4.آموزش متغیرهای پایتون10 ماه قبل5.آموزش انواع داده در پایتون10 ماه قبل6.آموزش اعداد در پایتون10 ماه قبل7.آموزش Casting (تبدیل نوع داده) در پایتون10 ماه قبل8.آموزش رشته در پایتون10 ماه قبل9.آموزش بولین یا Boolean در پایتون10 ماه قبل10.آموزش عملگرهای پایتون10 ماه قبل11.آموزش لیست در پایتون10 ماه قبل12.آموزش تاپل یا چندتایی در پایتون9 ماه قبل13.آموزش Set یا مجموعه در پایتون8 ماه قبل14.آموزش نوع داده دیکشنری در پایتون8 ماه قبل15.آموزش شرط if ... else در پایتون8 ماه قبل16.آموزش حلقه while در پایتون8 ماه قبل17.آموزش حلقه for در پایتون8 ماه قبل18.آموزش توابع در پایتون8 ماه قبل19.آموزش توابع Lambda (لامبدا) در پایتون8 ماه قبل20.آموزش آرایه در پایتون7 ماه قبل21.آموزش کلاس و Object در پایتون7 ماه قبل22.آموزش ارث بری یا وراثت در پایتون7 ماه قبل23.آموزش تکرارگر یا iterator در پایتون7 ماه قبل

کامنت ها