Get Mystery Box with random crypto!

خب سلام سوال که میدونیم چیه! حقیقتش نمیشه به این سوال جواب قطع | بنیاد پایتون کاران فارسی

خب سلام
سوال که میدونیم چیه!
حقیقتش نمیشه به این سوال جواب قطعی داد که یا قطعا generator یا قطعا نوشتن راه‌حل با یک کلاس و پیاده‌سازی یک iterable و iterator

اما بیاید از چند جهت بررسی‌اش کنیم:
• سادگی و خوانا بودن:
والا من که نمی‌تونم بگم کدوم ساده‌تر یا پیچیده‌تره، اما اگه اینجوری به قضیه نگاه کنیم که جنریتور فقط یک تابع هست و یک حلقه توش داره و من می‌دونم که وقتی اون iter تموم بشه بهم excption عه StopIteration برمیگردونه، فهمیدم چیه!

یا از اون طرف اون کلاس، اگه من بدونم که کار داندر ایتر و داندر next چیه؟‌ (که از اسمشون میشه فهمید که یه ربطی به توابع iter و next دارن) و اگه یک کلاسی اینا رو داشته باشه چی میشه، مسئله رو فهمیدم.

*بنظر من* جنریتور با نگاه بالا ساده‌تره چون داندر متد‌ها رو معمولا دیرتر از توابع و اینا یاد میگیریم!

• اما یکی از شاخص‌هاش سادگی یا پیچیدگی کد رو میشه با نگاه کردن به کد‌ها بررسی کرد. منظورم دقیقا نگاه کردن بهشون هست و نه خوندنش.

اگر همینجوری که کد رو دارید نگاه میکنید، کد رو ۹۰ درجه به سمت چپ بچرخونید و با تورفتگی‌ها یک کوه بکشید، می‌بینید که میزان قله و دره‌‌ها و کنار هم بودن‌شون در کد generator بیشتره اما کد کلاس flat تره.
توی ذن پایتون هم میخونیم:
Flat is better than nested!
پس *بنظر من* با نگاه بالا اینجا کد کلاس ساده تره.
و در کل نمیشه گفت حتما این ساده‌تره یا اون

• کارایی:
این دو نمونه کد *دقیقا* یک کار رو انجام میدن و یک خروجی دارن، هر دو lazy هستن، هر دو اون موقعی که ما روشون next میزنیم نتایج رو محاسبه میکنن و بهمون میدن و ...
اما اما اما وقتی من از کلاس استفاده میکنم میتونم اون کلاس رو توسعه‌اش بدم و کارایی‌هاش و قابلیت‌هاش رو بیشتر کنم تا فقط یک NGiver خالی نباشه، اما این در مورد generator صادق نیست.