Python – تکرارگر (Iterator)

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

تفاوت بین Iterable و Iterator

Iterable: آبجکت‌هایی هستند که می‌توان از آن‌ها یک تکرارگر ساخت. لیست‌ها، تاپل‌ها، دیکشنری‌ها و مجموعه‌ها نمونه‌هایی از آبجکت‌های iterable هستند. این آبجکت‌ها متد iter() را دارند که برای دریافت تکرارگر استفاده می‌شود.

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit))  # apple
print(next(myit))  # banana
print(next(myit))  # cherry

Iterator: شیء‌ای است که می‌تواند به صورت تکرارگر مورد استفاده قرار گیرد و می‌توان بر روی آن تکرار کرد. به طور کلی، همه iterable‌ها می‌توانند تکرارگر تولید کنند.

mystr = "banana"
myit = iter(mystr)

print(next(myit))  # b
print(next(myit))  # a
print(next(myit))  # n
print(next(myit))  # a
print(next(myit))  # n
print(next(myit))  # a

تکرار بر روی Iterator

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

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
    print(x)
mystr = "banana"

for x in mystr:
    print(x)

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

ایجاد یک Iterator

برای ایجاد یک کلاس به عنوان تکرارگر، باید متدهای __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))  # 1
print(next(myiter))  # 2
print(next(myiter))  # 3
print(next(myiter))  # 4
print(next(myiter))  # 5

جلوگیری از تکرار بی‌پایان با StopIteration

برای جلوگیری از تکرار بی‌پایان، می‌توان از خطای 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()
myiter = iter(myclass)

for x in myiter:
    print(x)

در این مثال، تکرارگر پس از ۲۰ تکرار متوقف می‌شود و خطای StopIteration پرتاب می‌شود.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.