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