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 - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

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

نظرات

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

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