
Generator در پایتون یک راه آسان برای تولید مرورگر است و با این ویژگی می توانید به راحتی یک تابع را کنترل کنید و در هر زمان از آن خروجی بگیرید. در مورد توابع معمولی در پایتون، موضوع سرعت و اندازه حافظه مورد بحث قرار می گیرد. در یک تابع پایتون، مشکلات سرعت و حافظه خواهید داشت که تا حد زیادی با استفاده از مولد پایتون حل می شود. در این مقاله از سری آموزش های برنامه نویسی پایتون به معرفی و بررسی ژنراتورها در پایتون می پردازیم.
دوره ارائه شده در ویدئو
با استفاده از ژنراتورها در پایتون، می توانید مقدار مشخصی را در هر خط کد خروجی بگیرید و برگردانید. این مزیت بسیار مهمی است که سرعت ضبط خروجی را تا حد زیادی افزایش می دهد و با استفاده از آن دیگر نیازی به مصرف حافظه زیادی نخواهید داشت.
یک مثال عملی از Generator در پایتون
به عنوان یک مثال عملی از Generator در پایتون، می توانید به کد زیر نگاه کنید. در این مثال ژنراتور به زبان پایتون طراحی شده است که بر اساس عدد n و در هر قسمت می تواند خروجی خاصی را به مولد پایتون برگرداند. این کار را می توان با استفاده از مرورگر و کلمه کلیدی yield انجام داد.
# A simple generator function
def generator():
n = 1
print('First')
yield n
n += 1
print('Second')
yield n
n += 1
print('Last')
yield n
a = generator()
next(a) #prints First
next(a) #prints Second
next(a) #prints Last
یک نکته مهم در مورد استفاده از توابع ژنراتور وجود دارد. مطمئن شوید که عدد n پس از هر اسکن به خاطر سپرده شده و در مرحله بعد استفاده می شود. این تابع در توابع معمولی موجود نیست و با هر بار فراخوانی تابع، اعداد به خاطر نمیآیند و باید عملیات از صفر شروع شود.
استفاده از تکرار حلقه در مولد پایتون
امکان استفاده از حلقه تکرار در Python Generator وجود دارد و می توانید نتایج دلخواه را به یکباره چاپ کنید. در واقع، با استفاده از ژنراتور در پایتون و استفاده از حلقه تکرار، نیازی به استفاده دائمی از کلمه کلیدی بعدی نیست.
مثال زیر یک عملیات پیمایش را نشان می دهد که بر اساس هر مرحله یک خروجی خاص را برمی گرداند. با استفاده از حلقه تکرار می توان خروجی ها را به یکباره چاپ کرد.
# A simple generator function
def generator():
n = 1
print('First')
yield n
n += 1
print('Second')
yield n
n += 1
print('Last')
yield n
for i in generator():
print(i) #prints First 1, Second 2, Last 3
طرح ژنراتور در پایتون
طرح کلی Generator در پایتون تقریباً شبیه به تعریف یک تابع است. با این تفاوت که برای برگرداندن خروجی باید به جای بازگشت از yield استفاده کنید. به این ترتیب تابع شما با رسیدن به بازده تمام نمی شود و پس از خروجی های اول و دوم می توانید خروجی های بعدی را از تابع مولد دریافت کنید.
در مثال زیر می بینید که تابع مولد پایتون تا پنج عدد خروجی را برگردانده و همه آنها با استفاده از یک حلقه تکراری در خروجی چاپ شده اند.
def generator():
yield 0
yield 1
yield 2
yield 3
yield 4
for i in generator():
print(i) #prints 0, 1, 2, 3, 4
محاسبه دنباله فیبوناچی با مولد در پایتون
می توانید از تابع Generator در این زبان برنامه نویسی برای دریافت خروجی مرحله به مرحله استفاده کنید. محاسبه دنباله فیبوناچی با Generator در پایتون امکان پذیر است و هر زمان که نیاز داشته باشید می توانید یک خروجی از این دنباله بگیرید.
def fib(limit):
a = 0
b = 1
while a < limit:
yield a
a, b = b, a+b
a = fib(10)
print(next(a)) #prints 0
print(next(a)) #prints 1
print(next(a)) #prints 1
print(next(a)) #prints 2
print(next(a)) #prints 3
print(next(a)) #prints 5
مزایای استفاده از ژنراتورها در پایتون
مزایای استفاده از ژنراتورها در پایتون بسیار زیاد است و یک ویژگی منحصر به فرد صرفه جویی در زمان و حافظه در این زبان برنامه نویسی است. در شرایطی که به دنبال ویژگی های خاص و اضافی نسبت به ویژگی های معمولی پایتون هستید، می توانید از ژنراتورهای این زبان استفاده کنید که مزایای زیر را در اختیار کاربر قرار می دهد.
سهولت استفاده
سهولت در استفاده از مزایای اصلی ژنراتورها در این زبان و شما می توانید مانند توابع در کمترین زمان یک تابع ژنراتور ایجاد کنید. در مقایسه با ناوبرها، این مولد پایتون مزیت بهتری دارد زیرا در ناوبری باید همزمان در هنگام کدنویسی از iter و next استفاده کنید.
ذخیره حافظه
ذخیره حافظه یک ویژگی بسیار مهم در ژنراتورهای پایتون است. توجه داشته باشید که هنگام استفاده از تابع، یک زنجیره عملیات مورد نیاز است و سپس خروجی برگردانده می شود. در این بین، مطمئناً عملیاتی وجود دارد که در مقطعی نیازی به آن نخواهیم داشت. مزیت ژنراتورها در پایتون این است که دقیقاً عملیات را در قسمت مورد نیاز انجام می دهد و خروجی در مرحله درخواستی چاپ می شود. این مزیت باعث صرفه جویی زیادی در حافظه خواهد شد.
صرفه جویی در زمان
امروزه زمان گرفتن نتیجه از کد نوشته شده یکی از اصول اساسی در برنامه نویسی است. شما باید کدهایی بنویسید که در زمان کوتاهی اجرا شوند و نتیجه را ارائه دهید. با حذف قطعات ناخواسته در برخی از مراحل کدنویسی با استفاده از ژنراتور، زمان دریافت خروجی بسیار بهتر خواهد شد و در شرایط بهتر می توان کدهای بهینه را در این زبان برنامه نویسی تولید کرد.
آخرین کلمه
مولد در پایتون یکی از اساسی ترین بخش های دستیابی به کد بهینه و سریع است. در شرایطی که باید مراقب حافظه و مصرف قطعات آن باشید، ژنراتورها به شما در انجام کدنویسی به این زبان در بهترین شرایط کمک می کنند. اگر می خواهید درباره Generator در پایتون اطلاعات بیشتری کسب کنید، می توانید مقاله مربوطه را در وب سایت programiz مطالعه کنید.

اگر در مورد Generator در پایتون سوالی دارید، می توانید آن را در قسمت نظرات همین صفحه با ما در میان بگذارید.