تقنية

heapq.nlargest في بايثون: هل الصفر يستهلك المولد؟

طلب صفر يعيد قائمة وسجلًا فارغين
بعد الطلب. [1] [2]

نفحص النتيجة وموضع المولد معًا. [1] [2]

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

لا؛ الطلب الصفري لا يستهلك قيم مولدنا هنا. [1] [2]

  • قيم المولد 4,9,7؛ طلب 1 يقرأها ويعيد [9]. [1] [2]
  • تعيد nlargest(0,g) قائمة فارغة. [1] [2]
  • يبقى سجل التوليد events فارغًا. [1] [2]
  • بعد الطلب، تعطي next القيمة الأولى 4. [1] [2]
  • اختبرنا 3.12.14؛ لا نعمم انعدام الآثار على كل المكررات. [1] [2]

المثال

import heapq as h
events=[]
def rows():
 for x in [4,9,7]:
  events.append(x)
  yield x
g=rows()
print(h.nlargest(0,g))
print(events)
print(next(g,'done'))

[1] [2]

لماذا بقي عند البداية؟

المصدر هنا يطلب مكررًا ويبدأ بنطاق عددي فارغ، فيعيد النتيجة قبل استخراج قيمة من مولدنا. طلب 1 في تحكم آخر يقرأ القيم ويعيد [9]. [1] [2]

القراءة التالية تعطي أول قيمة أربعة
قراءة لاحقة. [1] [2]

النطاق

سجلنا يضاف إليه عند التوليد. استدعاء next الأخير يستهلك قيمة عمدًا. قد يؤثر إنشاء مكرر مخصص؛ نفحص مولدنا فقط، دون قياس سرعة. [1] [2]

المراجع

  1. Python 3.12: nlargest
  2. CPython 3.12.14: nlargest
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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