الدرس 10 من 10

المولّدات الكسولة

هدف الدرس

قيمة عند الطلب لا قائمة كاملة

01

الشرح

الدالة العادية تحسب كل شيء ثم تُرجعه مرّة واحدة. أما الدالة التي فيها yield فتصير مولّدًا: كل yield يُسلّم قيمة ويتوقّف مكانه، ولا يُكمل حتى تُطلب التالية.

واستدعاؤها لا يُنفّذ منها سطرًا؛ يُرجع كائن مولّد فقط. وnext(gen) تطلب قيمة واحدة، وfor وlist() تطلبان حتى النهاية. وهذا التقييم الكسول هو ما يجعل ملفًّا بمليون سطر يمرّ في الذاكرة سطرًا سطرًا.

وتُركَّب المولّدات خطًّا: كل مرحلة تستقبل مولّدًا وتُرجع مولّدًا، ولا يُحسب شيء حتى يسحب آخر الخطّ. والفخّ: المولّد يُستهلك مرّة واحدة، والمرور عليه ثانيةً لا يعطي شيئًا، بلا خطأ.

02

المطلوب

اكتب مولّدين: parse(lines) يُسلّم (name, amount) من كل سطر غير فارغ والمبلغ رقم صحيح، وlarge(orders, limit) يُسلّم ما مبلغه limit فأكثر. ثم ركّبهما: big = list(large(parse(log), 100)).

معايير التصحيح

5 معايير
  1. parse و large دالتا مولّد
  2. parse تُسلّم الاسم والمبلغ رقمًا وتتخطّى الفارغ
  3. large تُسلّم ما بلغ الحدّ فأكثر
  4. big قائمة بناتج الخطّ كاملًا
  5. الخطّ كسول: next لا تقرأ أكثر ممّا تحتاج
main.py
المخرجاتPython · Pyodide

جارٍ تحميل بيئة بايثون… تُحمَّل مرّة واحدة ثم يحفظها المتصفح.

–/5

يبدأ الفحص حين تجهز البيئة.

5 معايير في بطاقة «المطلوب».