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 پرتاب می‌شود.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

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

نظرات

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

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