تقنية

deque في بايثون: هل السعة صفر تمنع استهلاك المولد؟

maxlen=0: لا عناصر، وقُرئت القيم الثلاث هنا.
صفر: لا عناصر.

maxlen تحدد الطول المحتفظ به؛ الصفر لا يمنع قراءة مولدنا المحدود هنا. [1]

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

لا؛ يبقى deque فارغًا بعد استنفاد المولد في التجربة. [1]

  • maxlen تحدد الطول المحتفظ به؛ الصفر لا يمنع قراءة مولدنا المحدود هنا. [1]
  • ينشئ deque محتواه من iterable؛ سجل seen يضاف إليه قبل كل yield في مثالنا. [1]
  • على CPython 3.12.14، مولدنا يعطي 2،5،8؛ نبني منه deque بالسعة maxlen=0. [1]
  • الناتج []، لكن seen يصبح [2,5,8]؛ next(g,"done") يعيد done: لا تبقى قيمة. [1]
  • تحكم بمولد جديد: maxlen=1 تحتفظ بـ[8] وتقرأ القيم الثلاث أيضًا؛ نفاد المدخل مختلف عن عدد العناصر المحتفظ بها. [1]

حد الطول

maxlen تحدد الطول المحتفظ به؛ الصفر لا يمنع قراءة مولدنا المحدود هنا. [1]

سجل القراءة

ينشئ deque محتواه من iterable؛ سجل seen يضاف إليه قبل كل yield في مثالنا. [1]

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

على CPython 3.12.14، مولدنا يعطي 2،5،8؛ نبني منه deque بالسعة maxlen=0. [1]

from collections import deque seen=[] def rows(): for value in [2,5,8]: seen.append(value) yield value g=rows() out=deque(g,maxlen=0) [1]

maxlen=1: يبقى 8، وقُرئت القيم الثلاث هنا.
واحد: آخر عنصر.

فارغ لكنه مستنفد

الناتج []، لكن seen يصبح [2,5,8]؛ next(g,"done") يعيد done: لا تبقى قيمة. [1]

print(list(out)) print(seen) print(next(g,"done")) [1]

تحكم بمولد جديد: maxlen=1 تحتفظ بـ[8] وتقرأ القيم الثلاث أيضًا؛ نفاد المدخل مختلف عن عدد العناصر المحتفظ بها. [1]

المراجع

  1. Python deque

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

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