آموزش تکرار شونده ها در پایتون (iterators)
در پایتون، تکرار شونده (iterators) شیءای است که به ما اجازه میدهد تا روی یک دنباله از مقادیر عمل تکرار (iteration) انجام دهیم و برای پیمایش مجموعه دادهها نیز کاربرد دارد. تکرار شونده ها در پایتون مفهومی ضروری در برنامهنویسی محسوب میشوند، زیرا راهی برای دسترسی به هر عنصر در دنباله، مانند لیست یا تاپل را همزمان فراهم میکنند.
تکرار شونده ها اغلب در حلقهها استفاده میشوند، زیرا روشی ساده و کارآمد برای تکرار و پیمایش از طریق عناصر یک دنباله ارائه میدهند. در این مطلب آموزشی از مکتوب، همهچیزهایی را که باید در مورد iterators در پایتون بدانید، از جمله نحوه ایجاد آنها، نحوه استفاده از آنها و مزایای آنها را پوشش خواهیم داد. پس تا آخر این مطلب ما را همراهی بفرمایید.
مفهوم تکرار شونده ها در پایتون
تکرار شونده شیءای است که دو متد __iter__ و __next__ را پیادهسازی میکند. متد __iter__ خود شیء تکرار شونده را برمیگرداند، در حالی که متد __next__ مقدار بعدی را در دنباله برمیگرداند. اگر مقدار بیشتری در دنباله وجود نداشته باشد، متد __next__ استثناء StopIteration را افزایش میدهد. در اینجا نمونه برنامه پایتون زیر یک تکرار شونده است که اعداد 1 تا 5 را برمیگرداند:
class MyIterator:
def __init__(self):
self.current = 1
def __iter__(self):
return self
def __next__(self):
if self.current > 5:
raise StopIteration
else:
self.current += 1
return self.current - 1
در مثال فوق، MyIterator یک تکرار شونده سفارشی است که ما ایجاد کردهایم. این تکرار شونده دارای یک متغیر جریان داخلی است که مقدار فعلی را در دنباله دنبال میکند و روشهای __iter__ و __next__ که رفتار آن را تعریف میکنند.
پیشنهاد مطالعه: معرفی کامل کتابخانه های پایتون
نحوه استفاده از تکرار شونده ها در پایتون
برای استفاده از تکرار شونده ها در پایتون، معمولاً از آنها در حلقه for (حلقه فور) استفاده میکنیم. در اینجا مثالی از این مفهوم آورده شده است:
it = MyIterator()
for num in it:
print(num)
این کد یک نمونه جدید از کلاس MyIterator ایجاد میکند و سپس از آن برای تکرار از طریق اعداد 1 تا 5 استفاده خواهد کرد.
همچنین میتوانیم بهصورت دستی متد __next__ را روی یک شیء تکرار شونده در برنامه نویسی پایتون (python programming) فراخوانی کنیم تا مقدار بعدی را در دنباله به دست آوریم:
it = MyIterator()
print(next(it)) # Output: 1
print(next(it)) # Output: 2
print(next(it)) # Output: 3
این کد یک نمونه جدید از کلاس MyIterator ایجاد میکند و سپس بهصورت دستی متد __next__ را روی شیء iterator سه بار فراخوانی خواهد کرد و مقادیر 1، 2 و 3 را دریافت میکند.
پیشنهاد مطالعه: پایتون یا جاوا اسکریپت؟ کدام زبان بهتر است؟
مزایای استفاده از Iterators در پایتون
تکرار شونده ها در پایتون مفهومی مهم در برنامهنویسی پایتون هستند، زیرا راهی برای دسترسی به هر عنصر در یک دنباله، یک به یک ارائه میدهند. این کار با مجموعه دادههای بزرگ را آسان میکند، زیرا ما میتوانیم به هر عنصر در دنباله تنها زمانی که به آن نیاز داشتیم دسترسی داشته باشیم، نه اینکه کل دنباله را به یکباره در حافظه بارگذاری کنیم.
تکرار شونده ها همچنین نسبت به لیستها یا تاپلها از نظر حافظه کارآمدتر هستند، زیرا آنها فقط یک مقدار را در هر زمان در حافظه ذخیره میکنند. این باعث میشود آنها برای کار با مجموعه دادههای بسیار بزرگی که خیلی بزرگ هستند و به یکباره در حافظه قرار نمیگیرند ایده آل ظاهر شوند. در نهایت، تکرارکنندهها بلوک اصلی بسیاری از ویژگیهای پایتون، مانند مولدها نیز محسوب میشوند. با تسلط بر مفهوم تکرار شونده ها در پایتون میتوان قدم خوبی را در راه توسعه دهنده پایتون برداشت.
پیشنهاد مطالعه: آموزش دستورات شرطی در پایتون به زبان ساده
ایجاد تکرار شونده های سفارشی در پایتون
علاوه بر تکرار شونده های داخلی در پایتون، میتوانیم تکرار شونده های پایتون سفارشی خود را نیز ایجاد کنیم. برای انجام این کار، باید متدهای __iter__ و __next__ را در کلاس خود پیادهسازی کنیم، درست مانند کاری که قبلاً با کلاس MyIterator انجام دادیم.
در اینجا یک مثال از یک تکرار شونده سفارشی است که اولین n عدد فیبوناچی را برمیگرداند:
class FibonacciIterator:
def __init__(self, n):
self.n = n
self.current = 0
self.next = 1
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= self.n:
raise StopIteration
else:
result = self.current
self.current, self.next = self.next, self.current + self.next
self.index += 1
return result
در مثال فوق، FibonacciIterator یک تکرار شونده سفارشی است که اولین n عدد فیبوناچی را برمیگرداند. این تکرار شونده در پایتون دارای یک جریان داخلی و متغیر بعدی است که اعداد فیبوناچی فعلی و بعدی و روشهای __iter__ و __next__ را که رفتار آن را مشخص میکند، پیگیری میکند.
پیشنهاد مطالعه: آشنایی با بهترین کتابهای آموزش پایتون انگلیسی و فارسی
Iterators داخلی در پایتون
پایتون چندین تکرار شونده داخلی ارائه میکند که میتوانیم بدون نیاز به ایجاد آنها در کد خود از آنها استفاده کنیم. در اینجا تعدادی از متداولترین تکرار شونده های داخلی در پایتون وجود دارد:
محدوده (range): تکرار شوندهای که دنبالهای از اعداد مشابه تابع محدوده تولید میکند.
for i in range(5):
print(i) # Output: 0 1 2 3 4
نقشه (map): تکرار شوندهای که تابعی (فانکشن در پایتون) را برای هر عنصر دنباله اعمال میکند.
squares = map(lambda x: x**2, [1, 2, 3, 4, 5])
for square in squares:
print(square) # Output: 1 4 9 16 25
فیلتر (filter): تکرار شوندهای که عناصر دنباله را که شرایط خاصی را برآورده میکنند، برمیگرداند.
evens = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
for even in evens:
print(even) # Output: 2 4
zip: تکرار شوندهای که دو یا چند دنباله را در یک دنباله ترکیب میکند.
letters = ['a', 'b', 'c']
numbers = [1, 2, 3]
pairs = zip(letters, numbers)
for pair in pairs:
print(pair) # Output: ('a', 1) ('b', 2) ('c', 3)
کاربرد تکرار شونده در پایتون چیست؟
تکرار کننده های پایتون در بسیاری از توابع و ماژولهای داخلی در پایتون مانند حلقه ها در پایتون، map() ،filter() و zip() استفاده میشوند. در اینجا برخی از مزایا و کاربردهای استفاده از تکرار شونده ها در پایتون آورده شده است:
- حافظه کارآمد: تکرار شونده ها حافظه کارآمد هستند زیرا فقط موارد مورد نیاز را از مجموعه بارگیری میکنند. این بدان معنی است که آنها میتوانند مجموعههای بزرگ را بدون مصرف حافظه زیاد اداره کنند.
- ارزیابی با تأخیر (Lazy Load): تکرارکنندهها از ارزیابی با تأخیر استفاده میکنند، به این معنی که فقط مورد بعدی را زمانی که درخواست میشود محاسبه میکنند. این هنگام کار با مجموعههای بینهایت یا بسیار بزرگ مفید است.
- سازگار با انواع مختلف مجموعهها (set در پایتون): تکرار شونده ها در پایتون با انواع مجموعهها مانند لیستها، تاپلها، مجموعهها، رشتهها و دیکشنریها کار میکنند.
- سریع و کارآمد: تکرار شونده ها سریع و کارآمد هستند زیرا نیازی به ذخیره کل مجموعه در حافظه ندارند. در عوض، آنها یک مورد را در یک زمان پردازش میکنند که میتواند بسیار سریعتر از بارگیری کل مجموعه در حافظه باشد.
در پایتون، میتوانید تکرار شوندههای خود را با تعریف کلاسی که متدهای __iter__() و __next__() را پیادهسازی میکند ایجاد کنید. متد __iter__() باید خود شیء iterator را برگرداند، در حالی که متد __next__() باید آیتم بعدی مجموعه را برگرداند. هنگامی که آیتم دیگری برای بازگشت وجود ندارد، متد __next__() باید استثناء StopIteration را افزایش دهد.
پیشنهاد مطالعه: آموزش کامل دستور Import در پایتون
سخن پایانی
در این نوشتار از مکتوب، همه آنچه را که باید در مورد تکرار شونده ها در پایتون بدانید، پوشش دادهایم. ما یاد گرفتهایم که تکرار شونده در پایتون چیست، چگونه تکرار شونده های سفارشی ایجاد کنیم و چگونه از تکرار شونده های داخلی مانند محدوده، نقشه، فیلتر و zip استفاده کنیم. ما همچنین در مورد مزایای استفاده از تکرار شونده ها در پایتون، از جمله کارایی حافظه و توانایی آنها برای کار با مجموعه دادههای بزرگ صحبت کردهایم. با تسلط بر مفهوم تکرارکننده، قادر خواهید بود کد پایتون کارآمدتر و قدرتمندتری بنویسید.
برای یادگیری حرفهای پایتون و شروع از صفر میتوانید از دورههای آموزشی استفاده کنید. دورههای آموزش پایتون مکتب خونه برای این هدف بهترینها محسوب میشوند. در مکتب خونه انواع دوره پایتون از مقدماتی تا پیشرفته قرار دارد. هم اکنون از طریق صفحه آموزش پایتون میتوانید از این دورهها دیدن کنید.