توضیح generator در پایتون

August 2019

پیش نیازها:

list comprehension

iterate

در پایتون generatorها راه حلی ساده و سریع برای ایجاد آبجکت ها iterable است. generatorها برخلاف listها بسیار تنبل هستند و برای صرفه جویی در منابع کاربرد دارند. generatorها به دو شکل قابل ساختن هستند.

"""
    Generator => 1.function  2.Expression
"""

روش اول به شکل یک فانکشن هستش. در این روش مثل با استفاده از کلمه کلیدی def یک فانکشن ایجاد میکنید. اما به جای return کردن مقدار نهایی، اون مقدار رو yield میکنید.

def show():
    yield 'show...'
    yield 'Hello...'
    yield 'Good job...'

برخلاف فانکشن های معمولی که شما فقط یک بار میتونستید یک مقدار رو return کنید در generatorها هر چند با که بخواهید میتونید مقدار yield کنید.کلمه yield هم دقیقا مثل مثل return مقدار رو به ما برمیگردونه اما به شکل متفاوتی. کد بالا رو که اجرا کنید نتیجه زیر رو میبینید:

<generator object show at 0x7f4632d8fbd0>

generatorها iterable هستند یعنی شما میتونید داخل اونها پیمایش کنید و به مقدارهاش دسترسی داشته باشید.

for i in show():
    print(i)

کد بالا به شکل زیر نتیجه میده:

show...
Hello...
Good job...

روش دوم برای ایجاد generatorها به شکل expression هستش. قوانین ساخت generatorها در این روش کامل مشابه list comprehension ها هستش:

even_nums = ( x for x in range(11) if x%2==0 )

for i in even_nums:
    print(i)

در مثال بالا یک generator داریم که اعداد زوج کمتر از ۱۰ رو به ما نشون میده.

برای اطلاعات بیشتر ویدیو رو تماشا کنید

ارسال نظر

اگر قراره سوالی بپرسید که داخلش کد هست، بهتره از کدتون عکس بگیرید و به ایمیلی که پایین نوشتم بفرستید

امیرعلی طنابیان

April 2021

سلام
خیلی عالی توضیح دادید
واقا ممنونم از شما
خیلی لطف کردید

پاسخ به نظر


امبرحسین

March 2021

سلام استاد ویدیو عالی و کاربردی بود من اونقد سایتارو می گشتم تا در رابطه با ژنراتور ها توی پایتون باشه بعد به سایت شما برخورد کردم به نظرم به ساده ترین و کوتاه ترین روش ممکن ژنراتور ها رو توضیح دادید ممنون.

پاسخ به نظر


Mohammad

January 2021

<p>سلام وقتتون بخیر خیلی ممنونم بابت ویدیو های خوبیتون به جرعت می تونم بگم بهترین ویدیویی بود که من در مورد جنراتور ها داخل پایتون دیدم و استفاده کردم بازم تشکر می کنم و یه سوال هم دارم میخواستم ببینم که متد __iter__ و __next__ وقتی داخل کلاس به عنوان متد تعریف میشن دقیقا چه کاری انجام میدن</p>

پاسخ به نظر


امیرحسین بیگدلو

January 2021

سلام
ممنون
ویدیو پایین رو ببینید
https://www.mongard.ir/one_part/53/creating-iterable-objects-python/

MORTEZA

January 2021

دقیقه 3.54 گفتید که نمیشه داخل یک تابع معمولی دوتا ریترن کنیم ولی با return a,b که میشه... :/

پاسخ به نظر


امیرحسین بیگدلو

January 2021

:)
منظورم این بود که نمیتونید دوبار از کلمه return استفاده کنید. مثلا:
return a
return b

ramin

December 2020

سلام و خسته نباشید
ممنون بابت این همه ویدیو خوب و باحالی که گذاشتین. خیلی خوبن. یه کار باحالی که انجام دادین توی تک قسمتی ها اینه که پیش نیاز نوشتین براش و این خیلی به درک بهتر موضوع کمک میکنه. :)

پاسخ به نظر


sima

October 2020

kheyli khob tozih midin mamnon

پاسخ به نظر


امیرحسین بیگدلو

October 2020

ممنون از شما

آرمین

October 2020

سلام بسیار عالی.

پاسخ به نظر


امیرحسین بیگدلو

October 2020

سلام
ممنون

ali

May 2020

سلام خسته نباشین.میخواستم ازتون تشکر کنم.سایت عالی دارین مرسی از زحماتتون

پاسخ به نظر


امیرحسین بیگدلو

May 2020

سلام
خوشحالم که راضی بودید