Iterator ها

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
Python-menu.png
موارد آموزشی
۱خانه
۲مقدمه
۳شروع کار
۴دستور زبان
۵توضیحات
۶متغیرها
۷انواع داده‌ها
۸اعداد
۹تبدیل نوع
۱۰رشته‌ها
۱۱Booleans
۱۲عملگرها
۱۳لیست‌ها
۱۴تاپل‌ها
۱۵مجموعه‌ها
۱۶دیکشنری‌ها
۱۷If...Else
۱۸حلقهٔ While
۱۹حلقهٔ For
۲۰توابع
۲۱Lambda
۲۲آرایه‌ها
۲۳کلاس‌ها / اشیاء
۲۴ارث‌بری
۲۵Iteratorها
۲۶دامنه
۲۷ماژول‌ها
۲۸تاریخ و زمان
۲۹JSON
۳۰RegEx
۳۱PIP
۳۲Try...Except
۳۳ورودی کاربر
۳۴قالب‌بندی رشته
مدیریت فایل
یادگیری ماشین
MySQL در پایتون
MongoDB در پایتون
مرجع پایتون
مرجع ماژول
چگونه در پایتون؟
مثال‌های پایتون

Iterator یک شیء است که دارای تعداد قابل شمارشی مقدار است.[۱]

Iterator شیءی است که می‌توان در آن پیمایش کرد، یعنی می‌توانید در بین همهٔ مقدارهای آن پیمایش کنید.

به لحاظ فنی، در پایتون، یک iterator شیءی است که پروتکل iterator را اجرا می‌کند که دارای متدهای __iter__() و __next__() است.

Iterator در مقابل Iterable

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

همهٔ اشیاء یک متد iter() دارند که برای گرفتن یک iterator استفاده می‌شود:

مثال

یک iterator از یک تاپل را برمی‌گرداند و هر مقدار را چاپ می‌کند:

1 mytuple = ("apple", "banana", "cherry")
2 myit = iter(mytuple)
3 
4 print(next(myit))
5 print(next(myit))
6 print(next(myit))


مشاهدهٔ نتیجه


حتی رشته‌ها هم اشیاء iterable هستند و می‌توانند یک iterator برگردانند:

مثال

همچنین رشته‌ها اشیاء iterable هستند و شامل دنباله ای از کاراکترها می‌شوند:

1 mystr = "banana"
2 myit = iter(mystr)
3 
4 print(next(myit))
5 print(next(myit))
6 print(next(myit))
7 print(next(myit))
8 print(next(myit))
9 print(next(myit))


مشاهدهٔ نتیجه


پیمایش در یک Iterator

می‌توان از یک حلقه for برای پیمایش در یک شیء iterable استفاده کرد:

مثال

مقدارهای یک تاپل را پیمایش می‌کند:

1 mytuple = ("apple", "banana", "cherry")
2 
3 for x in mytuple:
4   print(x)


مشاهدهٔ نتیجه


مثال

کاراکترهای رشته را پیمایش می‌کند:

1 mystr = "banana"
2 
3 for x in mystr:
4   print(x)


مشاهدهٔ نتیجه


در واقع حلقه for یک شیء iterator ایجاد می‌کند و متد next() را برای هر حلقه اجرا می‌کند.

ایجاد یک Iterator

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

همان‌طور که در بخش کلاس‌ها / اشیاء پایتون آموختید، همه کلاس‌ها تابعی به نام __init__() دارند که هنگام ایجاد شیء امکان مقداردهی اولیه را فراهم می‌کند.

متد __iter__() بطور مشابه عمل می‌کند، می‌توانید عملیات (initializing و غیره) انجام دهید، اما باید همیشه خود شیء iterator را برگرداند.

متد __next__() هم امکان انجام عملیات را فراهم می‌کند، و باید آیتم بعدی در دنباله را برگرداند.

مثال

یک iterator ایجاد می‌کند که اعداد را برمی‌گرداند، از ۱ شروع می‌شود و هر دنباله یکی اضافه می‌شود (۱، ۲، ۳، ۴، ۵ و غیره را برمی‌گرداند):

کلاس MyNumbers:

 1 class MyNumbers:
 2   def __iter__(self):
 3     self.a = 1
 4     return self
 5 
 6   def __next__(self):
 7     x = self.a
 8     self.a += 1
 9     return x
10 
11 myclass = MyNumbers()
12 myiter = iter(myclass)
13 
14 print(next(myiter))
15 print(next(myiter))
16 print(next(myiter))
17 print(next(myiter))
18 print(next(myiter))


مشاهدهٔ نتیجه


StopIteration

مثال بالا برای همیشه ادامه پیدا می‌کند اگر عبارت‌های next() کافی داشته باشید یا اگر در یک حلقه for استفاده می‌شد.

برای جلوگیری از ادامه پیدا کردن iteration تا ابد، می‌توانیم از عبارت StopIteration استفاده کنیم.

در متد __next__()، می‌توانیم یک شرط خاتمه تعریف کنیم تا در صورتیکه iteration از تعداد دفعات خاصی بیشتر شد، خطا بدهد:

مثال

 1 class MyNumbers:
 2   def __iter__(self):
 3     self.a = 1
 4     return self
 5 
 6   def __next__(self):
 7     if self.a <= 20:
 8       x = self.a
 9       self.a += 1
10       return x
11     else:
12       raise StopIteration
13 
14 myclass = MyNumbers()
15 myiter = iter(myclass)
16 
17 for x in myiter:
18   print(x)


مشاهدهٔ نتیجه



منابع آموزشی