تکرارشونده ها در پایتون

 تکرارشونده یک شئ است که می تواند بر روی مقادیری از یک دنباله (لیست، تاپل و...) عملی انجام دهد. این تکرار شونده ها معمولا در حلقه ها استفاده می شوند.

تکرار شونده ها از دو متد  __iter__  و __next__ استفاده می کنند.

متد ()__iter__ در پایتون

همه ی داده ها مانند تاپل و لیست و دیکشنری و... متدی به نام ()__iter__ دارند که از طریق متد ()iter فراخوانی می شوند و یک تکرارشونده در اختیار شما قرار می دهند.

برای مثال یک تاپل با سه مقدار ایجاد می کنیم.

mytuple = ("alireza", "ali", "reza")

متغیری به نام item ایجاد می کنیم تا با متد ()iter مقادیر تاپل را از هم جدا و قابل پرینت کند.

item= iter(mytuple)

با متد ()next به اندازه تعداد مقادیر تاپل، متغیر item را پرینت می کنیم.

print(next(item))
print(next(item))
print(next(item))

نکته: متد ()next می تواند مقادیری که پیمایش شده را برگرداند. 

تکرارشونده در رشته های پایتون

رشته ها داده هایی قابل تکرارند و این تکرار در کاراکترهای رشته ایجاد می شود.

در صورتی که عمل تکرار را در رشته انجام دهیم و با متد ()next آنرا پرینت کنیم، کاراکترهای رشته جداگانه نمایش داده می شوند.

item = iter(mystr)

تکرارشونده در حلقه های پایتون

از طریق حلقه ها می توان عمل تکرار را سریع تر انجام داد و به جای استفاده از متد ()next که طولانی است، می توان با حلقه ها در دنباله، تکرارشونده ای ایجاد کرد.

نکته: برای آشنایی بیشتر به درس  حلقه ها پایتون مراجعه کنید.

for x in mytuple:
  print(x)

کلاس تکرارشونده در پایتون

برای اینکه در یک کلاس تکرارشونده ایجاد کنید و در ادامه از آن استفاده کنید، به مثال زیر توجه کنید.

برای مثال می خواهیم از طریق کلاس ها یک دنباله از اعداد را بسازیم.

کلاسی به نام MyNumbers را ایجاد می کنیم و در ابتدا یک متد به نام iter می سازیم که در آن یک متغیر به نام a که اولین عدد دنباله را تعیین می کند داریم.(در اینجا برابر با یک است)

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

در متد بعدی به نام ()next ایجاد می کنیم که عدد a را به اضافه 1 می کند تا دنباله، متوالی ادامه یابد.

def __next__(self):
    x = self.a
    self.a += 1
    return x

کلاس را فراخوانی می کنیم و با هربار پرینت کردن با متد ()next، دنباله جلو می رود.

myiter = iter(myclass)

دستور StopIteration در پایتون

از طریق این دستور می توان تکرارشونده ها را محدود کرد تا در یک جا از دنباله به پایان برسد.

برای مثال می توان برای متد ()next شرطی را برقرار کرد که اگر دنباله به عدد 10 رسید، به پایان برسد.

def __next__(self):
    if self.a <= 10:
        x = self.a
        self.a += 1
        return x
    else:
        raise StopIteration

خلاصه درس

در این درس با تکرارشونده ها و کاربرد آنها آشنا شدید.

توسعه دهندگان
علیرضا چمنی