تکرارگرها (Iterators) در پایتون

تکرارگرها (Iterators) در پایتون
در پایتون، تکرارگر شیءی است که به شما اجازه میدهد تا عناصر یک مجموعه (مثل لیست یا تاپل) را بدون نیاز به استفاده از یک حلقه مبتنی بر ایندکس، یکییکی پیمایش کنید. تکرارگرها بخشی اساسی از پایتون هستند و از پروتکل تکرارگر پیروی میکنند.
مفاهیم کلیدی
- قابل تکرار (Iterable): یک شیء که میتواند یک تکرارگر برگرداند. مثالها شامل لیستها، تاپلها، رشتهها و دیکشنریها هستند. هر شیءی که متد
__iter__()
داشته باشد یا دارای دنبالهای از عناصر باشد، قابل تکرار است. - تکرارگر (Iterator): شیءی که نمایانگر یک جریان داده است. این شیء وضعیت تکرار را حفظ میکند و هنگام فراخوانی تابع
next()
یک عنصر را بازمیگرداند. - پروتکل تکرارگر (Iterator Protocol): یک شیء زمانی تکرارگر محسوب میشود که دو متد زیر را پیادهسازی کند:
__iter__()
برای بازگرداندن خود تکرارگر.__next__()
برای بازگرداندن عنصر بعدی در دنباله. زمانی که عنصری باقی نمانده باشد، یک استثنایStopIteration
ایجاد میکند.
ساخت و استفاده از تکرارگرها
مثال ۱: استفاده از اشیاء قابل تکرار پیشفرض
my_list = [1, 2, 3]
iterator = iter(my_list) # گرفتن تکرارگر
print(next(iterator)) # خروجی: 1
print(next(iterator)) # خروجی: 2
print(next(iterator)) # خروجی: 3
# print(next(iterator)) # ایجاد استثنای StopIteration
مثال ۲: ساخت کلاس تکرارگر سفارشی
شما میتوانید با تعریف متدهای __iter__
و __next__
تکرارگر خود را ایجاد کنید.
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current < self.end:
self.current += 1
return self.current – 1
else:
raise StopIteration
# استفاده از تکرارگر سفارشی
my_iter = MyIterator(0, 5)
for num in my_iter:
print(num) # خروجی: 0, 1, 2, 3, 4
تفاوت بین تکرارگرها و اشیاء قابل تکرار
- قابل تکرار (Iterable): میتوان آن را به تابع
iter()
پاس داد تا یک تکرارگر ایجاد شود. - تکرارگر (Iterator): میتوان آن را با استفاده از
next()
پیمایش کرد.
ژنراتورها: سادهسازی تکرارگرها
ژنراتورها روشی سادهتر برای ایجاد تکرارگرها با استفاده از کلمه کلیدی yield
هستند.
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
print(next(gen)) # خروجی: 1
print(next(gen)) # خروجی: 2
کاربردها
- خواندن فایلهای بزرگ خط به خط.
- پردازش جریانهای داده.
- پیادهسازی دنبالههای بینهایت.
اگر به توضیحات بیشتر یا مثالهای اضافه نیاز دارید، بگویید!
دیدگاهتان را بنویسید