برنامه نویسی و مفاهیم رایانه
برنامه نویسی و مفاهیم رایانه
خواندن ۲ دقیقه·۴ سال پیش

تکرار شونده یا Iterator در پایتون

در پایتون تعدادی نوع داده (Data Type) مانند تاپل و لیست هستند که توالی از عناصر هستند و می توانیم با استفاده از حلقه for..in آن را پیمایش کنیم و هر یک از عنصرهای آن را نمایش دهیم. هر لیست یا تاپل می تواند صفر یا چندین آیتم از نوع های دیگر داشته باشد.

تکرارشونده یا Iterator

در اینجا با یک مثال ساده تکرار شونده ها را خواهم گفت. تکرار شونده ها اشیایی هستند که می توانند بارها و بارها فراخوانی شوند و هر بار مقداری را تولید کنند. در حلقه for..in اگر متغیر یا عبارتی که پس از واژه کلیدی in می آید یک iterator نباشد، پایتون تلاش می کند که آن را به یک iterator تبدیل کند.

تابع ()next

تابع ()next یکی از توابع درونی پایتون است که به عنوان ورودی یک Iterator را دریافت می کند و در هر بار فراخوانی از نخستین عنصر تا آخرین عنصر را برگشت می دهد. در شکل زیر یک تاپل به نام t تعریف کرده ایم و سپس می خواهیم اولین عنصر آن را با ()next نمایش دهیم ولی خطایی نشان می دهد مبنی بر اینکه t (تاپل) یک Iterator نیست، پس نمی توانیم t را با ()next استفاده کنیم.

t = 1, 2, 3, 4 print(next(t))

تابع ()iter

تابع ()iter نیز یکی دیگر از توابع درونی پایتون است که همانند ()next در ارتباط با تکرار شونده ها است. این تابع به عنوان ورودی لیست، تاپل یا رشته (توالی از کاراکترها) را دریافت می کند و سپس آن را به یک Iterator تبدیل می کند و از این می تواند توسط تابع ()next استفاده شوند.

t = 1, 2, 3, 4 print(next(t)) t_i = iter(t) print(type(t_i))
خود اعداد هرگز نمی توانند به Iterator تبدیل شوند.

تابع ()range

تابع ()range برای ایجاد یک لیست عددی در بازه ای مشخص میان [a, b-1] استفاده می شود. برای نمونه اگر a=1 و b=11 یا (11, 1)range باشد، پس لیستی از اعداد ۱ تا ۱۰ (b-1) ساخته خواهد شد. اگر تنها مقدار 10 (تک مقدار) یا (10)range باشد، لیستی از صفر تا ۹ ساخته می شود.

بی توجه به این که ()range چه کاربردی دارد، می خواهم بگویم که این تابع یک Iterator تولید نمی کند. در کد زیر نخست خروجی ()range در متغیر l ریخته شده است که از نوع list خواهد بود که با توجه به نوشته های بالا یک Iterator نیست.

در کد زیر لیست l را به کمک تابع ()iter به تکرار شونده l_i تبدیل کرده ایم و سپس به کمک یک حلقه for ساده آیتم های درون آن را نمایش داده ایم.

در پایتون گونه ای از توابع به نام Generator ها هستند که مقدار محاسبه شده را به جای برگشت (return) و دخیره سازی در حافظه، در زمان نیاز (به هنگام استفاده) را به صورت یک Iterator برگشت می دهند. برای آشنایی با این مفهوم لینک زیر را بخوانید.

https://virgool.io/@pythonic/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-generator-%D9%88-%DA%A9%D9%84%D9%85%D9%87-%DA%A9%D9%84%DB%8C%D8%AF%DB%8C-yield-rl8m1egndvav


پایتونتابع rangeتابع nextتابع iteriterator
برنامه نویس پایتون و دوستدار سیستم های توزیع شده، دانش داده ها و زبان عبری http://learnhebrew.ir
شاید از این پست‌ها خوشتان بیاید