ایتریور Python
- صفحه قبلی وراثت Python
- صفحه بعدی دامنههای Python
ایتریور Python
ایتریور یک اشیاء است که شامل تعداد قابل شمارش مقادیر است.
ایتریورها اشیاء قابل ایترویتور هستند، یعنی میتوانید همه مقادیر را جستجو کنید.
技术上، در Python، ایترویتور اشیایی هستند که پروتکل ایترویتور را پیادهسازی میکنند، که شامل روشهایی هستند __iter__()
و __next__()
.
ایتریور VS اشیاء قابل ایترویتور (Iterable)
لیست، تورپ، دیکشنری و مجموعهها اشیاء قابل ایترویتور هستند. آنها جعبههای قابل ایترویتور هستند که میتوانید از آنها ایترویتور (Iterator) دریافت کنید (Iterator).
همه این اشیاء دارای روشهایی برای دریافت ایترویتور هستند 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))
جستجوی ایترویتور
ما همچنین میتوانیم از loop for برای جستجوی ایترویتورها استفاده کنیم:
مثال
ایتراسیون مقادیر تورپ
mytuple = ("apple", "banana", "cherry") برای x در mytuple: print(x)
مثال
ایتراسیون (گذر از) کاراکترهای رشته:
mystr = "banana" برای x در mystr: print(x)
توضیح:برای هر اجرای loop for، یک ایترویتور اشیاء ایجاد میشود. next()
مетод هستند.
ایجاد ایترویتور
برای اینکه اشیاء/کلاسها به عنوان ایترویتور (Iterator) ایجاد شوند، باید برای اشیاء __iter__()
و __next__()
مетод هستند.
همانطور که در فصل Python کلاس/اشیاء یاد گرفتید، همه کلاسها دارای روشی به نام __init__()
فنction،این که به شما اجازه میدهد در هنگام ایجاد اشیاء، برخی از تنظیمات اولیه را انجام دهید.
__iter__()
عملکرد مشابهی دارد، میتوانید عملیاتی (ابتدا و غیره) انجام دهید، اما باید همیشه خود را به عنوان یک آنتریتور بازگرداند.
__next__()
روش نیز اجازه میدهد تا عملیاتی را انجام دهید و باید پروژه بعدی در توالی را بازگرداند.
مثال
یک آنتریتور بازگرداننده اعداد ایجاد کنید که از 1 شروع میکند و هر ترتیب یک افزایش دارد (1، 2، 3، 4، 5 و غیره):
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()
استفاده کرد، یا در حلقه for، در این صورت مثال بالا به طور مداوم ادامه خواهد داد.
برای جلوگیری از ادامه ابدی تکرار، میتوان از دستور StopIteration
دستور.
در __next__()
در روش، اگر تکرار به تعداد مشخص شده برسد، میتوانیم یک شرط پایان به وجود آوریم تا خطا ایجاد شود:
مثال
در 20 بار تکرار بعد از توقف:
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): اگر self.a کمتر یا برابر با 20 باشد: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) برای x در myiter: print(x)
- صفحه قبلی وراثت Python
- صفحه بعدی دامنههای Python