ویدیو آشنایی با مفهوم iterate در پایتون

August 2019

در این بخش میخوایم در مورد سه فعل مهم در پایتون صحبت کنیم: Iterable, Iterator, Iteration

 

هر سه این کلمات از کلمه Iterate مشتق شدن. در زبان انگلیسی کلمه Iterate به معنی تکرار کردن است.

 

اول مفهوم Iteration میگم. در پایتون به عمل تکرار کردن میگیم Iteration. ما در زبان پایتون دو نوع Iteration داریم. اولی حلقه for و دومی حلقه while. به مثال زیر دقت کنید:

for i in range(1, 11):
    print(i)

 

در مثال بالا ما یک نمونه از Iteration رو داریم. پس به خود عمل تکرار کردن میگیم Iteration.

 

حالا Iterable رو میگیم. به آبجکت هایی که بتونیم روی اونها عمل تکرار رو انجام بدیم میگیم Iterable.

 

یا به عبارت دیگه به هر آبجکتی که بتونیم روش عمل Iteration رو انجام بدیم میگیم Iterable.

nums = [1, 2, 3, 4, 5]

for num in nums:
    print(num)

در مثال بالا میبینید که ما داخل لیست nums حلقه زدیم و تونستیم به مقدارهاش دسترسی داشته باشیم. الآن لیست nums یک آبجکت Iterable هستش.

 

مورد بعدی Iterator هستش. به آبجکت هایی که بتونن آخرین وضعیت خودشون رو حفظ کنن میگیم iterator

 

آبجکت هایی که بشه روشون متد next رو اجرا کرد میتونن آخرین وضعیت خودشون رو حفظ کنن.

 

در حال حاضر متد next روی لیستی که در بالا ساختیم قابل اجرا نیستش.

print( dir( nums ) )

 

اگه کد بالا رو اجرا کنید تمام اتریبیوت ها و متدهایی که در nums در دسترس هستش رو به ما نشون میده:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

در نتیجه ای که پایتون به ما نشون داده میبینید که متد __next__ وجود نداره.

 

اما به جاش متد __iter__ رو داریم که میتونه لیست nums رو به یک Iterator تبدیل کنه

inums = iter(nums)

در کد بالا با استفاده از متد iter لیست nums رو به یک Iterator تبدیل کردیم.

 

حالا اگه یک بار دیگه کد زیر رو اجرا کنید میبینید که متد next در دسترس هستش

print( dir( inums ) )

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']

 

حالا میتونید از متد next استفاده کنید و به آیتم های داخل لیست inums به صورت تکی دسترسی پیدا کنید:

print( next(inums) )
print( next(inums) )
print( next(inums) )
print( next(inums) )

حالا لیست inums یک Iterator هستش.

اگر ویدیو بالا را دوست داشتید پیشنهاد میکنیم به مطالب زیر هم سر بزنید:

آموزش ماژول platform در پایتون

آموزش ساخت آبجکت های iterable در پایتون

دوره سوم آموزش پروژه محور پایتون

ارزیابی class variableهای پایتون

مشکل سازگاری importها در پایتون

دوره آموزش الگوریتم‌نویسی در پایتون

آموزش ماژول pdb در پایتون

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم

سید محمد

April 2021

فوق العاده عالی و قابل فهم
برعکس 3 منبع قبلی که خوندم هیچی گیرم نیومد =)

پاسخ به نظر


امیرحسین

April 2021

عالی

پاسخ به نظر