فهرست سرفصل‌های Python
خانه (Home) مقدمه (Introduction) شروع به کار (Getting Started) سینتکس (Syntax) کامنت ها (Comments) متغیرها (Variables) متغیرها - نام گذاری (Variables Names) متغیرها - اختصاص چندین مقدار (Assign Multiple Values) متغیرها - خروجی (Output Variables) متغیرها - سراسری (Global Variables) انواع داده ها (Data Types) اعداد (Numbers) تبدیل (Casting) رشته ها (Strings) رشته ها - برش (Slicing Strings) رشته ها - اصلاح (Modify Strings) رشته ها - چسباندن (String Concatenation) رشته ها - قالب بندی (Format - Strings) رشته ها - کاراکتر فرار (Escape Characters) رشته ها - متدها (String Methods) بولین ها (Booleans) عملگرها (Operators) لیست ها (Lists) لیست ها - دسترسی به آیتم (Access List Items) لیست ها - تغییر آیتم (Change List Items) لیست ها - اضافه کردن آیتم (Add List Items) لیست ها - حذف کردن آیتم (Remove List Items) لیست ها - حلقه (Loop Lists) لیست ها - فهرست سازی فشرده (List Comprehension) لیست ها - مرتب سازی (Sort Lists) لیست ها - کپی (Copy Lists) لیست ها - چسباندن (Join Lists) لیست ها - متدها (List Methods) تاپل ها (Tuples) تاپل ها - دسترسی به آیتم ها (Access Tuple Items) تاپل ها - به روز رسانی (Update Tuples) تاپل ها - باز کردن (Unpack Tuples) تاپل ها - حلقه (Loop Tuples) تاپل ها - چسباندن (Join Tuples) تاپل ها - متدها (Tuple Methods) مجموعه ها - (Sets) مجموعه ها - دسترسی به آیتم ها (Access Set Items) مجموعه ها - اضافه کردن آیتم (Add Set Items) مجموعه ها - حذف کردن آیتم ها (Remove Set Items) مجموعه ها - حلقه (Loop Sets) مجموعه ها - چسباندن (Join Sets) مجموعه ها - یخ زده (Frozen Sets) مجموعه ها - متدها (Set Methods) دیکشنری ها (Dictionaries) دیکشنری ها - دسترسی به آیتم ها (Access Dictionary Items) دیکشنری ها - تغییر آیتم ها (Change Dictionary Items) دیکشنری ها - اضافه کردن آیتم (Add Dictionary Items) دیکشنری ها - حذف کردن آیتم (Remove Dictionary Items) دیکشنری ها - حلقه (Loop Dictionaries) دیکشنری ها - کپی (Copy Dictionaries) دیکشنری ها - تو در تو (Nested Dictionaries) دیکشنری ها - متدها (Dictionary Methods) شرط ها (If...Else) مطابقت (Match) حلقه While (While Loops) حلقه For (For Loops) توابع (Functions) دکوراتورها (Decorators) محدوده (Range) لامبدا (Lambda) آرایه ها (Arrays) شی گرایی (OOP) کلاس ها و اشیاء (Classes and Objects) وراثت (Inheritance) تکرارکننده ها (Iterators) چندریختی (Polymorphism) محدوده (Scope) ماژول ها (Modules) تاریخ و زمان (Datetime) ریاضی (Math) جی سون (JSON) عبارت منظم (Regex) پیپ (PIP) استثنا (Try...Except) قالب بندی رشته ها (String Formatting) خالی (None) ورودی از کاربر (User Input) محیط مجازی (Virtual Enviroment)
PYTHON

Python — تکرارکننده ها (Iterators)

آخرین بروزرسانی: 1404/07/05

تکرارکننده ها (Iterators)

تکرارکننده یا Iterator شیئی است که مجموعه ای شمارش پذیر از مقادیر را در خود دارد و می توان روی آن پیمایش انجام داد. در پایتون، یک تکرارکننده شیئی است که پروتکل تکرار را پیاده سازی می کند، یعنی شامل متدهای __iter__() و __next__() باشد.

تفاوت Iterator و Iterable

ساختارهایی مانند لیست، تاپل، دیکشنری و مجموعه ها همگی 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))

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

برای پیمایش مقادیر یک شیء قابل تکرار می توان از حلقه for استفاده کرد. در واقع حلقه for پشت صحنه یک تکرارکننده می سازد و متد next() را صدا می زند:

mytuple = ("apple", "banana", "cherry")
for x in mytuple:
    print(x)

ایجاد تکرارکننده

برای ساخت یک تکرارکننده سفارشی، باید متدهای __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))

مدیریت StopIteration

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

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()
for x in myclass:
    print(x)

ادامه یادگیری

برای مطالعه بیشتر درباره وراثت در پایتون یا آشنایی با چندریختی (Polymorphism) ادامه دهید.