تقنية

length_hint في بايثون: هل التقدير تسعة يعني تسعة عناصر؟

التقدير المعلن تسعة
التقدير. [1] [2]

افصل التقدير المعلن عن عد العناصر. [1] [2]

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

لا؛ التقدير لا يلزم أن يساوي عدد العناصر. [1] [2]

  • فئتنا Rows تنتج bud وleaf. [1] [2]
  • طريقة __length_hint__ تعيد 9. [1] [2]
  • length_hint(x) يعيد 9؛ العد بعد المرور 2. [1] [2]
  • إذا توفر len، يجربه length_hint أولًا. [1] [2]
  • اختبرنا 3.12.14؛ لا نقيس سرعة أو ذاكرة. [1] [2]

المثال

from operator import length_hint
class Rows:
    def __iter__(self):
        return iter(['bud','leaf'])
    def __length_hint__(self):
        return 9
x=Rows()
print(length_hint(x))
print(sum(1 for _ in x))

[1] [2]

لماذا اختلف العدد؟

المصدر هنا يسمح بتقدير أكبر أو أصغر من العدد الفعلي. لم نعرف __len__ في فئتنا؛ لذلك يستعمل الاستدعاء التقدير. أما sum فيزيد واحدًا لكل عنصر يصل إليه، فيحسب عنصرين. [1] [2]

عد العنصرين بعد المرور
العد. [1] [2]

الأولوية والنطاق

في فئة مقارنة ترث Rows وتضيف __len__ يعيد 2، تكون نتيجة length_hint هي 2 رغم بقاء التقدير 9. مثالنا قابل للمرور من جديد؛ لا نعمم ذلك على مكرر يستهلك مرة واحدة. [1] [2]

المراجع

  1. Python 3.12: operator.length_hint
  2. PEP 424: length hint specification
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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

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