الدالة itertools.tee()‎ في بايثون

من موسوعة حسوب

تعيد الدّالة itertools.tee()‎ عددًا مُحدّدًا من المُكرّرات المُستقلّة عن بعضها البعض من كائن واحد قابل للتّكرار.

البنية العامة

itertools.tee(iterable, n=2)

المعاملات

iterable

الكائن القابل للتّكرار.

n

عدد المُكرّرات المُستقلّة المرغوب إنشاؤها من الكائن iterable.

القيمة المعادة

عددٌ n من المُكرّرات المُستقلّة المُولَّدة من الكائن القابل للتّكرار المُعطى.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:

>>> it = itertools.tee('abc', 2)
>>> it
(<itertools._tee object at 0x7f79c6fc9f48>, <itertools._tee object at 0x7f79c4e73588>)
>>> [list(i) for i in it]
[['a', 'b', 'c'], ['a', 'b', 'c']]

ملاحظات

  • الدّالة مُكافئة لما يلي:
def tee(iterable, n=2):
    it = iter(iterable)
    deques = [collections.deque() for i in range(n)]
    def gen(mydeque):
        while True:
            if not mydeque:             # when the local deque is empty
                try:
                    newval = next(it)   # fetch a new value and
                except StopIteration:
                    return
                for d in deques:        # load it to all the deques
                    d.append(newval)
            yield mydeque.popleft()
    return tuple(gen(d) for d in deques)

ستُساعد الشّيفرة أعلاه على توضيح ما تقوم به الدّالة (رغم أنّ التّطبيق الفعليّ أكثر تعقيدًا ويستخدم طابور FIFO واحدًا فقط).

  • حالما تقسم الدّالة itertools.tee()‎ مُكرّرًا فلا يجب استخدام الكائن القابل للتّكرار الأصليّ في أي مكان آخر، وإلّا قد يتقدّم دون إعلام كائنات itertools.tee()‎.
  • قد تحتاج هذه الدّالة إلى ذاكرة كبيرة حسب حجم البيانات المؤقّتة التي ستحتاج إلى تخزينها. إن كان مُكرّرٌ يستخدم مُعظم أو كلّ البيانات قبل أن يبدأ مُكرّر آخر، فاستخدام الدّالة list()‎ أسرع من الدّالة itertools.tee()‎.

انظر أيضًا

مصادر