تقنية

tee في بايثون: هل نستعمل المكرر الأصلي بعد التقسيم؟

في التجربة: الأصل يقرأ 5، وتسلسل كل فرع 2 و8 و11.
الأصل يقرأ 5.

في تجربتنا، القراءة من المكرر الأصلي بعد tee تجعل الفرعين يتجاوزان قيمة؛ نختار القراءة من الفرعين بعد التقسيم. [1]

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

نتجنب ذلك هنا كي يحتفظ الفرعان بالقيم. [1]

  • في تجربتنا، القراءة من المكرر الأصلي بعد tee تجعل الفرعين يتجاوزان قيمة؛ نختار القراءة من الفرعين بعد التقسيم. [1]
  • على CPython 3.12.14، source=iter([2,5,8,11])؛ tee تعيد فرعين left وright. [1]
  • next(left) تعطي 2؛ بعدها next(source) تعطي 5، ثم next(left) تعطي 8. [1]
  • next(right) تعطي 2 ثم 8؛ الباقي [11] لكل فرع؛ القيمة 5 قرأها الأصل وحده. [1]
  • تحكم بمكرر جديد: استعمال الفرعين وحدهما يعطي [2,5,8,11] لكل منهما، حتى عند استهلاك الأول كاملًا قبل الثاني. [1]

القراءة بعد التقسيم

في تجربتنا، القراءة من المكرر الأصلي بعد tee تجعل الفرعين يتجاوزان قيمة؛ نختار القراءة من الفرعين بعد التقسيم. [1]

الأصل والفرعان

على CPython 3.12.14، source=iter([2,5,8,11])؛ tee تعيد فرعين left وright. [1]

طلب من الأصل

next(left) تعطي 2؛ بعدها next(source) تعطي 5، ثم next(left) تعطي 8. [1]

from itertools import tee source=iter([2,5,8,11]) left,right=tee(source) print(next(left)) print(next(source)) print(next(left)) print(next(right),next(right)) print(list(left),list(right)) [1]

التحكم: كل فرع يعطي [2,5,8,11].
الفرعان يحفظان القيم.

ما يصل إلى الفرعين

next(right) تعطي 2 ثم 8؛ الباقي [11] لكل فرع؛ القيمة 5 قرأها الأصل وحده. [1]

first,second=tee(iter([2,5,8,11])) print(list(first)) print(list(second)) [1]

تحكم بمكرر جديد: استعمال الفرعين وحدهما يعطي [2,5,8,11] لكل منهما، حتى عند استهلاك الأول كاملًا قبل الثاني. [1]

المراجع

  1. Python tee

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

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