"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحديد ما إذا كان المولد فارغًا في بايثون

كيفية تحديد ما إذا كان المولد فارغًا في بايثون

تم النشر بتاريخ 2024-11-16
تصفح:729

How to Determine If a Generator is Empty in Python

تحديد فراغ المولد

في بايثون، تعد المولدات أداة قوية للتقييم البطيء والتكرار على مجموعات البيانات الكبيرة. ومع ذلك، فإن تحديد ما إذا كان المولد فارغًا يمثل تحديًا فريدًا نظرًا لطبيعته الديناميكية. على عكس القوائم أو المجموعات، لا تحتوي المولدات على سمة الحجم، وسيؤدي التكرار عليها ببساطة إلى استثناء StopIteration.

Peek vs. HasNext قد يقترح البعض باستخدام الدالة peek() للتحقق مما إذا كان المولد يحتوي على عناصر. على الرغم من أن peek() يسمح لك باسترداد العنصر الأول من المولد دون استهلاكه، إلا أنه لا يوفر طريقة لتحديد ما إذا كان المولد فارغًا. وذلك لأن peek() يثير استثناء StopIteration عندما يكون المولد فارغًا، وهو ما لا يمكن تمييزه عن الاستثناء الذي قد يظهر عند محاولة التكرار على مولد فارغ.

وبالمثل، فإن الدالة hasNext()، الشائعة وجدت في جافا، وهي غير متوفرة في مولدات بايثون.

التحقق من الفراغ من البداية

لتحديد ما إذا كان المولد فارغًا من البداية، يمكنك استخدام وظيفة مخصصة مثل تلك المقدمة في الرد:

def peek(iterable): يحاول: الأول = التالي (قابل للتكرار) باستثناء StopIteration: عودة لا شيء return first, itertools.chain([first], iterable)
def peek(iterable):
    try:
        first = next(iterable)
    except StopIteration:
        return None
    return first, itertools.chain([first], iterable)

Usage

لاستخدام هذه الوظيفة، يمكنك الاتصال بها مع المولد كـ الوسيطة:

res = نظرة خاطفة (mysequence) إذا كان الدقة بلا: #التسلسل فارغ. افعل الأشياء. آخر: أولاً، تسلسلي = الدقة # افعل شيئًا أولاً، ربما؟ # ثم كرر التسلسل: للعنصر في mysequence: # إلخ.
res = peek(mysequence)
if res is None:
    # sequence is empty.  Do stuff.
else:
    first, mysequence = res
    # Do something with first, maybe?
    # Then iterate over the sequence:
    for element in mysequence:
        # etc.
بيان الافراج أعيد طبع هذه المقالة على: 1729390457 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3