تقنية

isgeneratorfunction في بايثون: هل False تمنع إرجاع مولد؟

isgeneratorfunction(factory) تعطي False.
الدالة العادية.

الدالة العادية قد تعيد كائن مولد؛ isgeneratorfunction تفحص الدالة، وisgenerator تفحص الكائن. [1]

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

لا؛ factory تعيد مولدًا هنا. [1]

  • الدالة العادية قد تعيد كائن مولد؛ isgeneratorfunction تفحص الدالة، وisgenerator تفحص الكائن. [1]
  • على CPython 3.12.14، factory تعيد rows()؛ rows تستخدم yield لإنتاج bud، وevents تسجل التنفيذ. [1]
  • isgeneratorfunction(factory) تعطي False؛ تحكم rows يعطي True. إرجاع مولد لا يجعل factory دالة مولدة. [1]
  • بعد made=factory()، isgenerator(made) تعطي True؛ السجل ["factory"] فقط، دون تشغيل جسم rows بعد. [1]
  • next(made) تعطي bud؛ يصبح السجل ["factory","yield"]. إنشاء المولد وبدء جسمه خطوتان في هذا المثال المؤلف. [1]

دالة وكائن

الدالة العادية قد تعيد كائن مولد؛ isgeneratorfunction تفحص الدالة، وisgenerator تفحص الكائن. [1]

مصنع المثال

على CPython 3.12.14، factory تعيد rows()؛ rows تستخدم yield لإنتاج bud، وevents تسجل التنفيذ. [1]

فحص الدالتين

isgeneratorfunction(factory) تعطي False؛ تحكم rows يعطي True. إرجاع مولد لا يجعل factory دالة مولدة. [1]

from inspect import isgeneratorfunction,isgenerator events=[] def rows(): events.append("yield") yield "bud" def factory(): events.append("factory") return rows() print(isgeneratorfunction(factory),isgeneratorfunction(rows)) [1]

isgenerator(made) تعطي True.
الكائن المعاد.

الإنشاء والبدء

بعد made=factory()، isgenerator(made) تعطي True؛ السجل ["factory"] فقط، دون تشغيل جسم rows بعد. [1]

made=factory() print(isgenerator(made),events) print(next(made),events) [1]

next(made) تعطي bud؛ يصبح السجل ["factory","yield"]. إنشاء المولد وبدء جسمه خطوتان في هذا المثال المؤلف. [1]

المراجع

  1. Python isgeneratorfunction/isgenerator

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

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