تقنية

isgenerator في بايثون: هل True تعني أن المولد مفتوح؟

بعد close: isgenerator(own) تعطي True.
النوع يبقى.

isgenerator تفحص نوع الكائن؛ تبقى True لمولدنا المغلق. getgeneratorstate تميز حالة التنفيذ. [1]

الخلاصة السريعة

لا؛ النوع لا يثبت بقاء المولد مفتوحًا. [1]

  • isgenerator تفحص نوع الكائن؛ تبقى True لمولدنا المغلق. getgeneratorstate تميز حالة التنفيذ. [1]
  • على CPython 3.12.14، rows تعطي bud؛ الحالة GEN_CREATED عند البناء، ثم GEN_SUSPENDED بعد next الأولى. [1]
  • بعد own.close() تصبح الحالة GEN_CLOSED؛ isgenerator(own) تبقى True كما قبل الإغلاق. [1]
  • next(own,"done") تعطي done الافتراضية، لا قيمة جديدة من المولد المغلق. [1]
  • تحكم بمولد جديد: next تعطي bud وحالته GEN_SUSPENDED. نختبر مولدًا متزامنًا بسيطًا، لا إدارة موارد أو تزامنًا. [1]

نوع وحالة

isgenerator تفحص نوع الكائن؛ تبقى True لمولدنا المغلق. getgeneratorstate تميز حالة التنفيذ. [1]

البدء والتعليق

على CPython 3.12.14، rows تعطي bud؛ الحالة GEN_CREATED عند البناء، ثم GEN_SUSPENDED بعد next الأولى. [1]

بعد الإغلاق

بعد own.close() تصبح الحالة GEN_CLOSED؛ isgenerator(own) تبقى True كما قبل الإغلاق. [1]

from inspect import isgenerator,getgeneratorstate def rows():yield "bud" own=rows() print(getgeneratorstate(own)) print(next(own),getgeneratorstate(own)) own.close() print(isgenerator(own),getgeneratorstate(own)) [1]

بعد close: getgeneratorstate تعطي GEN_CLOSED.
الحالة تنتهي.

الطلب والتحكم

next(own,"done") تعطي done الافتراضية، لا قيمة جديدة من المولد المغلق. [1]

print(next(own,"done")) control=rows() print(next(control),getgeneratorstate(control)) [1]

تحكم بمولد جديد: next تعطي bud وحالته GEN_SUSPENDED. نختبر مولدًا متزامنًا بسيطًا، لا إدارة موارد أو تزامنًا. [1]

المراجع

  1. Python isgenerator/getgeneratorstate

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.