ویدیو آشنایی با مفهوم 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ها در پایتون
سید محمد
April 2021پاسخ به نظر
فوق العاده عالی و قابل فهم
برعکس 3 منبع قبلی که خوندم هیچی گیرم نیومد =)
پاسخ به نظر
امیرحسین
April 2021پاسخ به نظر
عالی
پاسخ به نظر