Generator Comprehension در پایتون :
Generator Comprehension یک ویژگی قدرتمند در زبان برنامه نویسی پایتون است که امکان ایجاد ژنراتورها (generators) در یک خط کد را فراهم می کند. ژنراتورها به طور کلی یک نوع خاص از توابع هستند که مقادیر را به صورت تاخیری تولید می کنند. این بدان معناست که مقادیر تنها در هنگام استفاده از آنها تولید می شوند و به صورت یکپارچه و همزمان برای مصرف کننده ارائه می شوند.
Generator Comprehension شبیه به List Comprehension است، با این تفاوت که به جای ایجاد یک لیست، یک ژنراتور ایجاد می کند. بنابراین، به جای استفاده از عبارت داخل یک لیست، از آن برای تولید مقادیر در یک ژنراتور استفاده می شود.
عبارت Generator Comprehension با استفاده از دستور for و یک توابع تو در تو ایجاد می شود. به عنوان مثال، اگر می خواهید یک ژنراتور بسازید که مربع اعداد از ۱ تا ۵ را تولید کند، می توانید از عبارت زیر استفاده کنید:
generator = (x**2 for x in range(1, 6))
در این مثال، عبارت (x**2 for x in range(1, 6)) یک ژنراتور را ایجاد می کند که هر مربع از اعداد ۱ تا ۵ را تولید می کند. برای دسترسی به مقادیر تولید شده توسط ژنراتور، می توان از دستور next() استفاده کرد. به عنوان مثال:
print(next(generator)) # output: 1
print(next(generator)) # output: 4
print(next(generator)) # output: 9
print(next(generator)) # output: 16
print(next(generator)) # output: 25
در اینجا، تابع next() برای دریافت مقادیر تولید شده توسط ژنراتور استفاده می شود. هر بار که next() فراخوانی می شود، مقدار بعدی تولید شده توسط ژنراتور را به ما می دهد.
Generator Comprehension مزایای زیادی نسبت به استفاده از لیست های ساختگی (list comprehension) دارد. یکی از مهمترین مزایا این است که از حافظه کمتری استفاده می کند، زیرا مقادیر به صورت تاخیری تولید می شوند و به صورت یکپارچه برای مصرف کننده ارائه می شوند. این موضوع برای مجموعه داده های بزرگ بسیار مفید است. علاوه بر این، ژنراتورها می توانند بی نهایت باشند و به صورت لانه کشی (nesting) نیز قابل استفاده هستند.
به طور خلاصه، Generator Comprehension یک ویژگی قدرتمند در پایتون است که امکان ایجاد ژنراتورها در یک خط کد را فراهم می کند. این ویژگی، بهینه سازی حافظه و امکان استفاده از ژنراتورها در مجموعه داده های بزرگ را فراهم می کند.